[PATCH 1/3] os/connection: Improve abstraction for launchd secure sockets
Emil Velikov
emil.l.velikov at gmail.com
Mon Oct 10 10:11:41 UTC 2016
On 9 October 2016 at 20:51, Jeremy Huddleston Sequoia
<jeremyhu at apple.com> wrote:
> This changes away from hard-coding the /tmp/launch-* path to now
> supporting a generic <absolute path to unix socket>[.<screen>]
> format for $DISPLAY.
>
> cf-libxcb: d978a4f69b30b630f28d07f1003cf290284d24d8
>
> Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu at apple.com>
> CC: Adam Jackson <ajax at kemper.freedesktop.org>
> ---
> os/connection.c | 31 ++++++++++++++++++++++++++-----
> 1 file changed, 26 insertions(+), 5 deletions(-)
>
> diff --git a/os/connection.c b/os/connection.c
> index a901ebf..0d42184 100644
> --- a/os/connection.c
> +++ b/os/connection.c
> @@ -79,6 +79,8 @@ SOFTWARE.
> #include <stdio.h>
> #include <stdlib.h>
>
> +#include <sys/stat.h>
> +
> #ifndef WIN32
> #include <sys/socket.h>
>
> @@ -1112,15 +1114,34 @@ MakeClientGrabPervious(ClientPtr client)
> void
> ListenOnOpenFD(int fd, int noxauth)
> {
> - char port[256];
> + char port[PATH_MAX];
... = {0, }; // or port[0] = 0;
> XtransConnInfo ciptr;
> const char *display_env = getenv("DISPLAY");
>
> - if (display_env && (strncmp(display_env, "/tmp/launch", 11) == 0)) {
> - /* Make the path the launchd socket if our DISPLAY is set right */
> - strcpy(port, display_env);
> + /* First check if display_env matches a <absolute path to unix socket>[.<screen number>] scheme (eg: launchd) */
> + if (display_env && display_env[0] == '/') {
As-is the patch will accept badly formed DISPLAY and port will end up
garbage. Might be better to keep track of/override port instead.
> + struct stat sbuf;
> +
> + strlcpy(port, display_env, sizeof(port));
> +
> + /* If the path exists, we don't have do do anything else.
> + * If it doesn't, we need to check for a .<screen number> to strip off and recheck.
> + */
> + if (0 != stat(port, &sbuf)) {
Nit: !stat(...)
> + char *dot = strrchr(port, '.');
> + if (dot) {
> + *dot = '\0';
> +
> + if (0 != stat(port, &sbuf)) {
Ditto
> + display_env = NULL;
port[0] = 0;
> + }
> + } else {
> + display_env = NULL;
Ditto.
> + }
> + }
> }
> - else {
> +
> + if (!display_env) {
if (!port[0]) {
Regards,
Emil
More information about the xorg-devel
mailing list