Commit Graph

825 Commits

Author SHA1 Message Date
Enrico Weigelt, metux IT consult b335a0fa20 dix: unexport CloseDownClient()
This function isn't used by drivers, so no need to export it.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1383>
2024-03-13 00:47:36 +00:00
Enrico Weigelt, metux IT consult 02ba47f09d os: move out Format*() functions
Move out the Format*() functions to separate source and header.

These aren't exported, thus no module API change.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1312>
2024-03-09 17:34:51 +00:00
Enrico Weigelt, metux IT consult 040e41c7e9 dix: unexport global variables
Those aren't used by drivers, so no need to export them.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1375>
2024-03-09 17:23:43 +00:00
Enrico Weigelt, metux IT consult 30b403b0f0 os: unexport Fopen(), Fclose(), Popen(), Pclose(), System()
These functions are just used for reading auth file or calling xkbcomp while
dropping privileges, in case the Xserver is started as unprivileged user
with suid-root. Thus, shouldn't be used (and aren't used) by drivers.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1370>
2024-03-09 17:18:46 +00:00
Enrico Weigelt, metux IT consult 15d3c1a6f1 os: move os_move_fd() out of public API
This function isn't used by any driver and doesn't seem to be useful for them,
thus move it out of the public module API, in order to tidy it up a bit.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1366>
2024-03-09 17:12:46 +00:00
Enrico Weigelt, metux IT consult 1bdbe1cb3f os: fix missing X11/Xdefs.h include in os/osdep.h
osdep.h needs Bool type, which is defined X11/Xdefs.h.
For now it works, since Xdefs usually is already included somewhere
else, but that's an unreliable programming styles which quickly hits
us when changing include order.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1366>
2024-03-09 17:12:46 +00:00
Enrico Weigelt, metux IT consult 934b771f7a os: unexport AutoResetServer()
This is an internal function, not used and not supposed to be used by
any drivers, so shouldn't have been exported in the first place.

Fixes: 49f77fff14
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1372>
2024-03-07 23:10:17 +00:00
Enrico Weigelt, metux IT consult b1ce5543f1 dix: unexport workqueue functions
These aren't used by drivers, so no need to export them.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1376>
2024-03-07 22:57:53 +00:00
Enrico Weigelt, metux IT consult c3255fbc1c os: drop unneeded DDXOSVERRORF conditional
This conditional practically only controls whether we have an pointer,
where DDX can plug in it's own VErrorF() handler (currently only xwin
doing that). The cost of having it even when DDX doesn't use it, is
really negligible: it's just one pointer and an extra non-null check
on it per VErrorF() call - a very cold path. Strangely, xwin has extra

Getting rid of this unnecessary complexity that really hasn't any
practical gain.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1329>
2024-03-03 23:15:14 +00:00
Enrico Weigelt, metux IT consult 40c5d39c55 include: move xsha1.h to os/
This header is never exported and belongs to OS layer, thus no need to have it
in include/ directory, where all the public ones are - better off under os/.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1350>
2024-03-03 23:11:05 +00:00
Enrico Weigelt, metux IT consult 77f9792911 os: simplify win32 uname()
Just define struct utsname and a tiny uname() function instead of
cluttering the code with ifdef's.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1295>
2024-03-03 23:02:54 +00:00
Enrico Weigelt, metux IT consult 7bd19a9580 xwin: replace ZeroMemory()
replace Windows specific ZeroMemory (macro just calling memset())
by static initialization, calloc() and memset().

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1295>
2024-03-03 23:02:54 +00:00
Enrico Weigelt, metux IT consult de34a20dc3 os: fix mising prototype / include on WIN32 builds
[90/383] Compiling C object os/liblibxlibc.a.p/strcasestr.c.obj
359../os/strcasestr.c:45:1: warning: no previous prototype for ‘xstrcasestr’ [-Wmissing-prototypes]
360   45 | xstrcasestr(const char *s, const char *find)
361      | ^~~~~~~~~~~

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1295>
2024-03-03 23:02:54 +00:00
Enrico Weigelt, metux IT consult 0706c03f9d os: fix unused variable on WIN32 build
../os/access.c:443:18: warning: unused variable ‘n’ [-Wunused-variable]
420  443 |     register int n;
421      |                  ^
422

[120/383] Compiling C object os/liblibxserver_os.a.p/connection.c.obj
431../os/connection.c:137:14: warning: ‘ParentProcess’ defined but not used [-Wunused-variable]
432  137 | static Pid_t ParentProcess;
433      |              ^~~~~~~~~~~~~

../os/connection.c:132:13: warning: ‘RunFromSmartParent’ defined but not used [-Wunused-variable]
435  132 | static Bool RunFromSmartParent; /* send SIGUSR1 to parent process */
436      |             ^~~~~~~~~~~~~~~~~~

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1295>
2024-03-03 23:02:54 +00:00
Enrico Weigelt, metux IT consult 43a6d4eb61 os: fix unused variable on non-IPv6 build
[119/383] Compiling C object os/liblibxserver_os.a.p/access.c.obj
415../os/access.c: In function ‘DefineSelf’:
416../os/access.c:468:26: warning: unused variable ‘inet6addr’ [-Wunused-variable]
417  468 |     struct sockaddr_in6 *inet6addr;
418      |                          ^~~~~~~~~

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1295>
2024-03-03 23:02:54 +00:00
Enrico Weigelt, metux IT consult 5d2f675ca8 os: utils: drop obsolete System() on non-win32 targets
This function is only used on WIN32 targets, so we can drop the *nix
implementation.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1295>
2024-03-03 23:02:54 +00:00
Enrico Weigelt, metux IT consult 22a67f7818 os: move string functions to separate source file
Unclutter the huge utils.c a bit, by moving out string functions to
their own source file.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1336>
2024-02-29 10:09:37 +00:00
Enrico Weigelt, metux IT consult 3e9ac852bc os: move alloc functions to separate source file
Reduce the massive os/utils.c a little bit by moving out the alloc
functions to their own source file.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1336>
2024-02-29 10:09:37 +00:00
Enrico Weigelt, metux IT consult ceb60b0cda os: unexport TimerInit() and TimerForce()
These functions aren't used by and drivers (and TimerInit() shouldn't be
be called from modules at all), thus unexport them.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1330>
2024-02-29 01:20:57 +00:00
Enrico Weigelt, metux IT consult 0f37f6fb4c os: drop unused GetAccessControl()
This function isn't used anywhere, not even in (known) modules/drivers.
So we can remove it.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1343>
2024-02-29 01:15:45 +00:00
Matthieu Herrb 52d71b025d Fix build with -Dxdmcp=false
Signed-off-by: Matthieu Herrb <matthieu@herrb.eu>
2024-02-25 11:55:56 +01:00
Enrico Weigelt, metux IT consult fe1e2b7b3d dix: unexport and move maxBigRequestSize
* this symbol is a server configuration flag (can be passed via cmdline)
  for limiting the max size of big-requests. there shouldn't be any need
  to use it outside the core X server (in server modules like drivers
  or external extension) - therefore unexport it
* in order to reduce namespace pollution of public (server module API)
  headers, create a new internal header for those tings (more to come)

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1275>
2024-02-23 23:19:32 +00:00
Enrico Weigelt, metux IT consult eed0697ec9 os: consolidate busfault handling
The symbols HAVE_SIGACTION and BUSFAULT are set under the same conditions,
so can be consolidated into one. Also define dummies when HAVE_SIGACTION
is not set, so a few #ifdef's less clutterig the code.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1297>
2024-02-23 23:15:12 +00:00
Peter Hutterer eaa92ea422 Revert "include: move BUG_*() macros to separate header"
This breaks the xf86-input-synaptics driver:

  synaptics.c: In function 'clickpad_guess_clickfingers':
  synaptics.c:2638:5: error: implicit declaration of function 'BUG_RETURN_VAL' [-Werror=implicit-function-declaration]
   2638 |     BUG_RETURN_VAL(hw->num_mt_mask > sizeof(close_point) * 8, 0);

This reverts commit 442aec2219.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1316>
2024-02-23 23:11:01 +00:00
Enrico Weigelt, metux IT consult af9f70013a dix: dixutils: make workQueue pointer dix-private
The workQueue pointer is currently declared extern, so that WaitForSomething()
can check wether we've got something in the queue and call ProcessWorkQueue()
then.

But that's trivial to simplify: just let ProcessWorkQueue() return early if
workQueue == NULL. Gives us a better isolation of internal stuff as well as
ProcessWorkQueue() protecting itself from possible segfault.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1310>
2024-02-23 23:06:38 +00:00
Enrico Weigelt, metux IT consult 6816605e22 os: move Auth* function types to separate header
The generic auth handling isn't really OS specific, and only few sites
actually need to call it, so at least it's prototypes are better off in some
separate header.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1311>
2024-02-22 23:42:53 +00:00
Enrico Weigelt, metux IT consult 5620102dfe os: move mitauth prototypes to separate header
The MIT authentication handling isn't really OS specific, and only few sites
actually need to call it, so at least it's prototypes are better off in some
separate header.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1311>
2024-02-22 23:42:52 +00:00
Enrico Weigelt, metux IT consult 8c4759a68e os: move xdmauth prototypes to separate header
The xdmcp authentication handling isn't really OS specific, and only few sites
actually need to call it, so at least it's prototypes are better off in some
separate header.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1311>
2024-02-22 23:42:52 +00:00
Enrico Weigelt, metux IT consult 194a7c2032 os: move xdmcp prototypes to separate header
The xdmcp handling isn't really OS specific, and only few sites actually need
to call it, so at least it's prototypes are better off in some separate header.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1311>
2024-02-22 23:42:52 +00:00
Enrico Weigelt, metux IT consult 664c3b6ba8 os: move rpcauth prototypes to separate header
The rpc authentication handling isn't really OS specific, and only few sites
actually need to call it, so at least it's prototypes are better off in some
separate header.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1311>
2024-02-22 23:42:52 +00:00
Enrico Weigelt, metux IT consult 8c4a015cc2 os: color: fix possible buffer overflow vulnerability
The old approach of builtin color lookup used a binary search of strings
within text blocks (their start offsets defined in the color array).

This could potentially lead to buffer overflow, if the requested color
name far outreaches the text block (eg. same prefix as some entry near to
the end, but really huge). This alone wouldn't allow remote memory readout
(just comparing), but could possibly trigger page faults (sigsegv) or used
as a building block for some more complex attack.

OTOH, the old approach is also hard to maintain, ugly programming style:
on each change, all the offset need to be carefully recounted, which is
pretty error-prone.

Both problems are solved by moving to simple, per-entry, char* pointers,
instead of the one large text block.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1313>
2024-02-22 23:33:34 +00:00
Enrico Weigelt, metux IT consult 7a010beefe os: oscolor: fix BuiltinColor field naming
The "name" field doesn't actually hold the color's name, but instead the
offset of the name in the string table block. Thus, fix the field's name
to reflect this.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1313>
2024-02-22 23:33:34 +00:00
Alan Coopersmith a91a862332 unifdef SUNSYSV
I can't tell what this code was originally for - it was added in 1988,
4 years before the release of the SysV R4 release of Solaris 2.0, and
I can't find anywhere that defined SUNSYSV.

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1315>
2024-02-19 15:12:41 -08:00
Alan Coopersmith 584a9715c3 unifdef apollo
Apollo Domain/OS died in the 1990's and has never been supported in
the modular Xserver builds.

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2024-02-17 16:31:46 -08:00
Matthieu Herrb 7dfe1c56b0 OpenBSD build fix: struct ucred is struct sockpeercred there 2024-02-18 00:16:38 +00:00
Enrico Weigelt 442aec2219 include: move BUG_*() macros to separate header
Yet another step of uncluttering includes: move out the BUG_* macros
into a separate header, which then is included as-needed.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2024-02-15 23:33:46 +00:00
Alan Coopersmith a8bb924af1 os: Assume all supported non-WIN32 platforms have seteuid & saved_ids
Removes fallback code to fork and exec a "cat" command to read files.

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2024-02-10 00:05:54 +00:00
Zoltán Böszörményi 0df31f068d Use log lines prefixed with human readable time
Fixes: #399
Signed-off-by: Zoltán Böszörményi <zboszor@gmail.com>
2023-12-17 19:37:03 +00:00
Jan Beich 5c8f70a17c os: Use KERN_PROC_ARGS to determine client command on DragonFly and FreeBSD 2023-12-17 17:16:23 +00:00
Jan Beich 58e8c967b6 os: Use LOCAL_PEERCRED to determine local client PID on FreeBSD
LOCAL_PEERCRED is similar to SO_PEERCRED but takes SOL_LOCAL. On DragonFly
cr_pid isn't supported yet, so fall back to getpeereid().

Based on https://gitlab.freedesktop.org/wayland/wayland/-/commit/54b237a61257
2023-12-17 17:07:16 +00:00
Sam James 94945a5274 Switch to libbsd-overlay
This is more portable than libbsd as everything Just Works, even on BSD systems,
and is the recommended method of consuming libbsd nowadays.

It also helpfully lets things work with glibc-provided functions for new
enough glibc.

Closes: https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/973
Co-authored-by: Guillem Jover <guillem@hadrons.org>
Signed-off-by: Sam James <sam@gentoo.org>
2023-08-16 19:56:50 +00:00
Simon Ser 21b3dad238 Allow disabling the SHAPE extension at runtime
To correctly render a window making use of SHAPE, a compositor
must query the shape rectangles. This may not be a desirable
feature for a Wayland compositor. Allow SHAPE to be turned off at
runtime, so that the compositor can opt-out.

Signed-off-by: Simon Ser <contact@emersion.fr>
2023-03-03 18:28:40 +00:00
Alan Coopersmith d6b20f5e36 Remove "All rights reserved" from Oracle copyright notices
Oracle no longer includes this term in our copyright & license notices.

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2023-02-25 09:40:41 -08:00
Jeremy Huddleston Sequoia 0ea9b59589 darwin: Implement DetermineClientCmd for macOS
Withoug a proper implementation of DetermineClientCmd, clients that
connect via an ssh tunnel are miscategorized as local.  This results
in failures when we try to use SCM_RIGHTS (eg: in MIT-SHM).

Fixes: https://github.com/XQuartz/XQuartz/issues/314
Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
2023-01-26 17:51:16 +00:00
Jeremy Huddleston Sequoia 8a4ab22873 os: Use LOCAL_PEERPID from sys/un.h if it is available to detemine the pid when falling back on getpeereids()
This provides a way to determine the pid of a peer connection on
systems like darwin that do not support getpeerucred() nor
SO_PEERCRED.

Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
2023-01-26 17:51:16 +00:00
Jeremy Huddleston Sequoia 165d5c1260 os: Update GetLocalClientCreds to prefer getpeerucred() or SO_PEERCRED over getpeereid()
GetLocalClientCreds() was preferring getpeereid() above other implementations.

getpeereid(), however, only returns the effective uid and gid of the peer,
leaving the pid unset.  When this happens, we are unable to use the pid to
determine the peer's command line arguments and incorrectly treat ssh-tunneled
traffic as local.

To address this, we now prioritize getpeerucred() or SO_PEERCRED as those two
implementations will return the pid in addition to uid and gid.

Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
2023-01-26 17:51:16 +00:00
Jeremy Huddleston Sequoia 2577291f01 os: Update AllocNewConnection() debug logging to include whether or not the client is local
Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
2023-01-26 17:51:16 +00:00
Peter Hutterer 412777664a Disallow byte-swapped clients by default
The X server swapping code is a huge attack surface, much of this code
is untested and prone to security issues. The use-case of byte-swapped
clients is very niche, so let's disable this by default and allow it
only when the respective config option or commandline flag is given.

For Xorg, this adds the ServerFlag "AllowByteSwappedClients" "on".
For all DDX, this adds the commandline options +byteswappedclients and
-byteswappedclients to enable or disable, respectively.

Fixes #1201

https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1029

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2023-01-06 11:59:37 +10:00
Julian Orth 762096628c os/connection: don't leave `port` uninitialized
If DISPLAY is set but does not start with `/`, `port` is now
initialized.

Fixes 83d0d91106
2022-12-29 21:05:26 +00:00
Peter Harris 2ab70dede7 os: Restore buffer when writing to network
The commit 9bf46610a9 "os: Immediately
queue initial WriteToClient" effectively disables buffering (of all
writes, not just the "initial" write), since the OS's network buffers
will usually be large enough to hold whatever replies we have sent.

This does improve performance when drawing over a Unix socket (I measure
approximtely 10%, not the ~5x mentioned in that commit message, probably
due to the large changes in this area since that commit), but it
decreases performance when drawing over a network due to the additional
TCP packets. This decrease is small (~10%) in most cases, but if the two
machines have mismatched Nagle / tcp_delay settings it can cause
XGetWindowAttributes to take 200ms (because it's composed of two
requests, the 2nd of which might wait for the ack which is delayed).

Avoid network slowdowns by making the immediate flush conditional on
who->local.

Signed-off-by: Peter Harris <pharris@opentext.com>
2022-09-09 16:52:43 +00:00