diff options
author | Koichiro IWAO <meta@vmeta.jp> | 2018-05-29 00:30:22 +0900 |
---|---|---|
committer | Koichiro IWAO <meta@vmeta.jp> | 2018-05-30 01:27:23 +0900 |
commit | 72b508844940b72482ecbb2c837039b7c73d7f81 (patch) | |
tree | e810211448edc53fbcb6aa33c654a2d6a723493e | |
parent | 57015aa08862d6e7d21a04ecb6fbfde3c2cc79fd (diff) | |
download | xrdp-proprietary-72b508844940b72482ecbb2c837039b7c73d7f81.tar.gz xrdp-proprietary-72b508844940b72482ecbb2c837039b7c73d7f81.zip |
FreeBSD: separate rc script into xrdp and xrdp-sesman
to improve fscd(8)[1] compatibility. fscd(8) monitors daemons and
restarts after daemons crashed. We usually want to start, stop, and
restart xrdp and xrdp-sesman separately because restarting xrdp-sesman
means losing existing sessions. This change will enable fscd(8) not to
restart xrdp-sesman together when only xrdp daemon crashes.
Now rc.d/xrdp mainly has following commands:
* start - starts xrdp
* stop - stops xrdp
* restart - stops xrdp, then starts it again
* allstart - starts both xrdp and xrdp-sesman
* allstop - stops both
* allrestart - stops both, then start them again
* status - returns status of xrdp
rc.d/xrdp-sesman doesn't have all- prefixed commands.
[1] https://www.freshports.org/sysutils/fsc/
-rw-r--r-- | instfiles/Makefile.am | 3 | ||||
-rw-r--r-- | instfiles/rc.d/Makefile.am | 2 | ||||
-rw-r--r-- | instfiles/rc.d/xrdp | 74 | ||||
-rw-r--r-- | instfiles/rc.d/xrdp-sesman | 44 |
4 files changed, 85 insertions, 38 deletions
diff --git a/instfiles/Makefile.am b/instfiles/Makefile.am index 8d39af0c..cc7e1446 100644 --- a/instfiles/Makefile.am +++ b/instfiles/Makefile.am @@ -97,5 +97,6 @@ endif if FREEBSD # must be tab below install-data-hook: - sed -i '' 's|%%PREFIX%%|$(prefix)|g' $(DESTDIR)$(sysconfdir)/rc.d/xrdp + sed -i '' 's|%%PREFIX%%|$(prefix)|g' $(DESTDIR)$(sysconfdir)/rc.d/xrdp \ + $(DESTDIR)$(sysconfdir)/rc.d/xrdp-sesman endif diff --git a/instfiles/rc.d/Makefile.am b/instfiles/rc.d/Makefile.am index 17993232..24e5c5cc 100644 --- a/instfiles/rc.d/Makefile.am +++ b/instfiles/rc.d/Makefile.am @@ -1,2 +1,2 @@ startscriptdir = $(sysconfdir)/rc.d -dist_startscript_SCRIPTS = xrdp +dist_startscript_SCRIPTS = xrdp xrdp-sesman diff --git a/instfiles/rc.d/xrdp b/instfiles/rc.d/xrdp index 9dec649e..b5dbcd25 100644 --- a/instfiles/rc.d/xrdp +++ b/instfiles/rc.d/xrdp @@ -1,6 +1,7 @@ #!/bin/sh # -# Copyright (c) 1992-2015 The FreeBSD Project. All rights reserved. +# Copyright (c) 1992-2018 The FreeBSD Project. All rights reserved. +# Copyright (c) 2015-2018 Koichiro Iwao <meta@FreeBSD.org> # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -26,55 +27,56 @@ # $FreeBSD$ # # REQUIRE: DAEMON -# PROVIDE: xrdp xrdp_sesman +# PROVIDE: xrdp # +# Add the following line to /etc/rc.conf to enable xrdp: +# +# xrdp_enable="YES" +# xrdp_sesman_enable="YES" . /etc/rc.subr name="xrdp" -rcvar=xrdp_enable -xrdp_daemons="xrdp" +rcvar="xrdp_enable" -# Read settings and set default values. load_rc_config "$name" : ${xrdp_enable="NO"} -# Enable/disable dependent daemon. -if [ -n "${rcvar}" ] && checkyesno "xrdp_sesman_enable"; then - xrdp_daemons="xrdp xrdp_sesman" -fi +extra_commands="status allstart allstop allrestart" +command="%%PREFIX%%/sbin/xrdp" + +allstart_cmd="xrdp_allstart" +allstop_cmd="xrdp_allstop" +allrestart_cmd="xrdp_allrestart" -# Commands. -extra_commands="reload status" -start_cmd="xrdp_cmd" -stop_cmd="xrdp_cmd" -status_cmd="xrdp_cmd" -reload_cmd="xrdp_cmd" -rcvar_cmd="xrdp_cmd" +xrdp_allstart() +{ + run_rc_command "start" + + if checkyesno "xrdp_sesman_enable" && \ + ! %%PREFIX%%/etc/rc.d/xrdp-sesman forcestatus 1>/dev/null 2>&1; then + %%PREFIX%%/etc/rc.d/xrdp-sesman start || return 1 + fi +} -# Command wrapper to call each of them per daemon. -xrdp_cmd() { - local name rcvar command pidfile xrdp_daemons - # Prevent recursive calling. - unset "${rc_arg}_cmd" - # Stop processes in the reverse to order. - if [ "${rc_arg}" = "stop" ] ; then - xrdp_daemons=$(reverse_list ${xrdp_daemons}) +xrdp_allstop() +{ + if checkyesno "xrdp_sesman_enable" && \ + %%PREFIX%%/etc/rc.d/xrdp-sesman forcestatus 1>/dev/null 2>&1; then + %%PREFIX%%/etc/rc.d/xrdp-sesman stop || return 1 fi - # Apply to all the daemons. - for name in ${xrdp_daemons}; do - rcvar=${name}_enable - if [ "${name}" = "xrdp_sesman" ]; then - command="%%PREFIX%%/sbin/xrdp-sesman" - pidfile="/var/run/xrdp-sesman.pid" - else - command="%%PREFIX%%/sbin/${name}" - pidfile="/var/run/${name}.pid" - fi + run_rc_command "stop" +} + +xrdp_allrestart() +{ + if checkyesno "xrdp_sesman_enable" && \ + %%PREFIX%%/etc/rc.d/xrdp-sesman forcestatus 1>/dev/null 2>&1; then + %%PREFIX%%/etc/rc.d/xrdp-sesman restart || return 1 + fi - run_rc_command "${_rc_prefix}${rc_arg}" ${rc_extra_args} - done + run_rc_command "restart" } run_rc_command "$1" diff --git a/instfiles/rc.d/xrdp-sesman b/instfiles/rc.d/xrdp-sesman new file mode 100644 index 00000000..a4e96f8e --- /dev/null +++ b/instfiles/rc.d/xrdp-sesman @@ -0,0 +1,44 @@ +#!/bin/sh +# +# Copyright (c) 1992-2015 The FreeBSD Project. All rights reserved. +# Copyright (c) 2015-2018 Koichiro Iwao <meta@FreeBSD.org> +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# $FreeBSD$ +# +# REQUIRE: LOGIN +# PROVIDE: xrdp_sesman +# + +. /etc/rc.subr + +name="xrdp_sesman" +rcvar="xrdp_sesman_enable" + +load_rc_config "$name" +: ${xrdp_sesman_enable="NO"} + +extra_commands="status" +command="%%PREFIX%%/sbin/xrdp-sesman" + +run_rc_command "$1" |