diff options
author | Keith Packard <keithp@keithp.com> | 2014-09-12 11:33:48 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2014-09-15 08:41:38 -0700 |
commit | 2eb79e306553420e16c61978087dc2402360251e (patch) | |
tree | 720abb826b85775d63c44b7c1b9343d1c7cd666a | |
parent | d3427717f2c6a473dc3d20631dff653e4e37228e (diff) |
os: Don't listen to 'tcp' by default. Add '-listen' option. [v2]listen-fixes
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@keithp.com>
-rw-r--r-- | configure.ac | 20 | ||||
-rw-r--r-- | include/dix-config.h.in | 9 | ||||
-rw-r--r-- | man/Xserver.man | 7 | ||||
-rw-r--r-- | os/utils.c | 29 |
4 files changed, 65 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac index cba7d24ea..a7bd8bda6 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 2203f82b4..41b6a225e 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 7a74e8541..c03830c15 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 c83f77dda..82fc621ce 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; } |