[PATCH] os: Don't listen to 'tcp' by default. Add '-listen' option. [v2]
Hans de Goede
hdegoede at redhat.com
Mon Sep 15 11:04:27 PDT 2014
Hi,
On 09/15/2014 05:42 PM, Keith Packard wrote:
> This disables the tcp listen socket by default. Then, it
> uses a new xtrans interface, TRANS(Listen), to provide a command line
> option to re-enable those if desired.
>
> v2: Leave unix socket enabled by default. Add configure options.
>
> Signed-off-by: Keith Packard <keithp at keithp.com>
Looks good:
Reviewed-by: Hans de Goede <hdegoede at redhat.com>
Regards,
Hans
> ---
> configure.ac | 20 ++++++++++++++++++++
> include/dix-config.h.in | 9 +++++++++
> man/Xserver.man | 7 +++++++
> os/utils.c | 29 +++++++++++++++++++++++++++++
> 4 files changed, 65 insertions(+)
>
> diff --git a/configure.ac b/configure.ac
> index cba7d24..a7bd8bd 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -484,6 +484,16 @@ AC_ARG_WITH(os-vendor, AS_HELP_STRING([--with-os-vendor=OSVENDOR], [Name o
> AC_ARG_WITH(builderstring, AS_HELP_STRING([--with-builderstring=BUILDERSTRING], [Additional builder string]),
> [ BUILDERSTRING="$withval" ]
> [ ])
> +AC_ARG_ENABLE(listen-tcp, AS_HELP_STRING([--enable-listen-tcp],
> + [Listen on TCP by default (default:disabled)]),
> + [LISTEN_TCP=$enableval], [LISTEN_TCP=no])
> +AC_ARG_ENABLE(listen-unix, AS_HELP_STRING([--disable-listen-unix],
> + [Listen on Unix by default (default:enabled)]),
> + [LISTEN_UNIX=$enableval], [LISTEN_UNIX=yes])
> +
> +AC_ARG_ENABLE(listen-local, AS_HELP_STRING([--disable-listen-local],
> + [Listen on local by default (default:enabled)]),
> + [LISTEN_LOCAL=$enableval], [LISTEN_LOCAL=yes])
>
> dnl Determine font path
> XORG_FONTROOTDIR
> @@ -1081,6 +1091,16 @@ if test "x$RES" = xyes; then
> SDK_REQUIRED_MODULES="$SDK_REQUIRED_MODULES $RESOURCEPROTO"
> fi
>
> +if test "x$LISTEN_TCP" = xyes; then
> + AC_DEFINE(LISTEN_TCP, 1, [Listen on TCP socket])
> +fi
> +if test "x$LISTEN_UNIX" = xyes; then
> + AC_DEFINE(LISTEN_UNIX, 1, [Listen on Unix socket])
> +fi
> +if test "x$LISTEN_LOCAL" = xyes; then
> + AC_DEFINE(LISTEN_LOCAL, 1, [Listen on local socket])
> +fi
> +
> # The XRes extension may support client ID tracking only if it has
> # been specifically enabled. Client ID tracking is implicitly not
> # supported if XRes extension is disabled.
> diff --git a/include/dix-config.h.in b/include/dix-config.h.in
> index 2203f82..41b6a22 100644
> --- a/include/dix-config.h.in
> +++ b/include/dix-config.h.in
> @@ -496,4 +496,13 @@
> /* byte order */
> #undef X_BYTE_ORDER
>
> +/* Listen on TCP socket */
> +#undef LISTEN_TCP
> +
> +/* Listen on Unix socket */
> +#undef LISTEN_UNIX
> +
> +/* Listen on local socket */
> +#undef LISTEN_LOCAL
> +
> #endif /* _DIX_CONFIG_H_ */
> diff --git a/man/Xserver.man b/man/Xserver.man
> index 7a74e85..c03830c 100644
> --- a/man/Xserver.man
> +++ b/man/Xserver.man
> @@ -196,6 +196,13 @@ with
> This option may be issued multiple times to disable listening to different
> transport types.
> .TP 8
> +.B \-listen \fItrans-type\fP
> +enables a transport type. For example, TCP/IP connections can be enabled
> +with
> +.BR "\-listen tcp" .
> +This option may be issued multiple times to enable listening to different
> +transport types.
> +.TP 8
> .B \-noreset
> prevents a server reset when the last client connection is closed. This
> overrides a previous
> diff --git a/os/utils.c b/os/utils.c
> index c83f77d..82fc621 100644
> --- a/os/utils.c
> +++ b/os/utils.c
> @@ -557,6 +557,7 @@ UseMsg(void)
> ErrorF("-nolock disable the locking mechanism\n");
> #endif
> ErrorF("-nolisten string don't listen on protocol\n");
> + ErrorF("-listen string listen on protocol\n");
> ErrorF("-noreset don't reset after last client exists\n");
> ErrorF("-background [none] create root window with no background\n");
> ErrorF("-reset reset after last client exists\n");
> @@ -646,6 +647,19 @@ VerifyDisplayName(const char *d)
> return 1;
> }
>
> +static const char *defaultNoListenList[] = {
> +#ifndef LISTEN_TCP
> + "tcp",
> +#endif
> +#ifndef LISTEN_UNIX
> + "unix",
> +#endif
> +#ifndef LISTEN_LOCAL
> + "local",
> +#endif
> + NULL
> +};
> +
> /*
> * This function parses the command line. Handles device-independent fields
> * and allows ddx to handle additional fields. It is not allowed to modify
> @@ -664,6 +678,12 @@ ProcessCommandLine(int argc, char *argv[])
> PartialNetwork = TRUE;
> #endif
>
> + for (i = 0; defaultNoListenList[i] != NULL; i++) {
> + if (_XSERVTransNoListen(defaultNoListenList[i]))
> + ErrorF("Failed to disable listen for %s transport",
> + defaultNoListenList[i]);
> + }
> +
> for (i = 1; i < argc; i++) {
> /* call ddx first, so it can peek/override if it wants */
> if ((skip = ddxProcessArgument(argc, argv, i))) {
> @@ -849,6 +869,15 @@ ProcessCommandLine(int argc, char *argv[])
> else
> UseMsg();
> }
> + else if (strcmp(argv[i], "-listen") == 0) {
> + if (++i < argc) {
> + if (_XSERVTransListen(argv[i]))
> + ErrorF("Failed to enable listen for %s transport",
> + argv[i]);
> + }
> + else
> + UseMsg();
> + }
> else if (strcmp(argv[i], "-noreset") == 0) {
> dispatchExceptionAtReset = 0;
> }
>
More information about the xorg-devel
mailing list