diff options
author | dteske <dteske@FreeBSD.org> | 2016-02-10 04:44:50 +0800 |
---|---|---|
committer | dteske <dteske@FreeBSD.org> | 2016-02-10 04:44:50 +0800 |
commit | 3d9e48586e71c55bb7668f24ae758808333b7e84 (patch) | |
tree | cb7e91f7212e59f36c2ea9ed4ff685bb6e27906d /net/pptpclient | |
parent | 1c7fea0b2459e77b6fb4066227b4dcb9df8c2b47 (diff) | |
download | freebsd-ports-gnome-3d9e48586e71c55bb7668f24ae758808333b7e84.tar.gz freebsd-ports-gnome-3d9e48586e71c55bb7668f24ae758808333b7e84.tar.zst freebsd-ports-gnome-3d9e48586e71c55bb7668f24ae758808333b7e84.zip |
net/pptpclient: Add pptp service(8) script
Reviewed by: feld
Differential Revision: https://reviews.freebsd.org/D5236
Diffstat (limited to 'net/pptpclient')
-rw-r--r-- | net/pptpclient/Makefile | 3 | ||||
-rw-r--r-- | net/pptpclient/files/README | 11 | ||||
-rw-r--r-- | net/pptpclient/files/pptp.in | 169 |
3 files changed, 182 insertions, 1 deletions
diff --git a/net/pptpclient/Makefile b/net/pptpclient/Makefile index 290682f7fd64..f1e3f9b985be 100644 --- a/net/pptpclient/Makefile +++ b/net/pptpclient/Makefile @@ -3,7 +3,7 @@ PORTNAME= pptpclient PORTVERSION= 1.8.0 -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= net MASTER_SITES= SF/${PORTNAME}/pptp/pptp-${PORTVERSION} DISTNAME= pptp-${PORTVERSION} @@ -14,6 +14,7 @@ COMMENT= PPTP client for establishing a VPN link with an NT server LICENSE= GPLv2+ USES= perl5 +USE_RC_SUBR= pptp MAKE_ARGS= CC="${CC}" OPTIMIZE="${CFLAGS}" DEBUG="" \ PPPD="/usr/sbin/ppp" IP="/usr/bin/true" CFLAGS+= -DUSER_PPP diff --git a/net/pptpclient/files/README b/net/pptpclient/files/README index 1805c93dfa6b..c2fe77e90aac 100644 --- a/net/pptpclient/files/README +++ b/net/pptpclient/files/README @@ -28,3 +28,14 @@ If you want to access the remote system from other hosts on your LAN, be sure to turn on IP forwarding on the PPTP client machine. John Polstra <jdp@freebsd.org> + +Starting as a service: + + # Configure /etc/ppp/ppp.conf as described above + $ sysrc pptp_enable=YES + $ sysrc pptp_flags="SERVER [LABEL]" + $ service pptp start + +NB: LABEL can be omitted if you used "default" for LABEL in ppp.conf(5). + +Devin Teske <dteske@freebsd.org> diff --git a/net/pptpclient/files/pptp.in b/net/pptpclient/files/pptp.in new file mode 100644 index 000000000000..80a29491f052 --- /dev/null +++ b/net/pptpclient/files/pptp.in @@ -0,0 +1,169 @@ +#!/bin/sh +# +# Copyright (c) 2015-2016 Devin Teske +# All rights reserved. +# +# 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$ +# + +# PROVIDE: pptp +# REQUIRE: DAEMON LOGIN FILESYSTEMS +# KEYWORD: shutdown + +. /etc/rc.subr + +name="pptp" +rcvar="${name}_enable" +command="%%PREFIX%%/sbin/${name}" +pidfile="/var/run/${name}.pid" +: ${pptp_timeout=10} +extra_commands="iface inet" + +pptp_query() +{ + local qtype="$1" + ifconfig -l | awk '{ + n = split($0, a) + for (i = 1; i <= n; i++) + if (a[i] ~ /^tun[[:digit:]]+/) print a[i] + }' | xargs -rn1 -Iif ifconfig if inet | awk -v qtype="$qtype" ' + BEGIN { qtype = tolower(qtype) } + /^[^[:space:]]/ { iface = $1; next } + iface && $1 == "inet" && $3 == "-->" { inet[iface] = $2; next } + $1$2$3 == "OpenedbyPID" { pid[iface] = $4 } + END { + for (iface in pid) { + (cmd = "ps -o ucomm= -p " pid[iface]) | getline ucomm + close(cmd) + if (ucomm != "ppp") continue + if (qtype == "iface") { + sub(/:.*/, "", iface) + print iface + found = 1 + } else if (qtype == "inet" && inet[iface]) { + print inet[iface] + found = 1 + } else if (qtype != "inet") { + print pid[iface] + found = 1 + } + } + exit !found + }' +} + +pptp_start() +{ + local pid inet timeout="$pptp_timeout" + if pid=$( pptp_query pid ); then + echo "$name already running as pid $pid." + return 1 + fi + + debug "$command $pptp_flags &" + eval $command $pptp_flags \& + echo -n "Waiting for pptp to start" + if [ $timeout -gt 0 ] 2> /dev/null; then + while [ $timeout -gt 0 ] && ! pid=$( pptp_query pid ); do + sleep 1 + echo -n . + timeout=$(( $timeout - 1 )) + done + else + while ! pid=$( pptp_query pid ); do sleep 1; echo -n .; done + fi + echo + echo -n "Waiting for ppp session" + while pid=$( pptp_query pid ); do + inet=$( pptp_query inet ) && break + sleep 1 + echo -n . + done + echo + if ! inet=$( pptp_query inet ); then + rm -f "$pidfile" + echo "pptp failed to start." + return 1 + fi + echo "$pid" > "$pidfile" +} + +pptp_stop() +{ + local pid + if ! pid=$( pptp_query pid ); then + echo "$name is not running." + return 1 + fi + + kill $pid + echo -n "Waiting for pid $pid to exit" + while pid=$( pptp_query pid ); do sleep 1; echo -n .; done + echo + rm -f "$pidfile" + echo "$name stopped." +} + +pptp_status() +{ + local pid + if ! pid=$( pptp_query pid ); then + echo "$name is not running." + return 1 + fi + echo "$name is running as pid $pid." +} + +pptp_iface() +{ + local pid iface + if ! pid=$( pptp_query pid ); then + echo "$name is not running." >&2 + return 1 + fi + if ! iface=$( pptp_query iface ); then + echo "$name not associated with any interface." >&2 + return 1 + fi + echo "$iface" +} + +pptp_inet() +{ + local pid inet + if ! pid=$( pptp_query pid ) || ! inet=$( pptp_query inet ); then + echo "$name is not running." >&2 + return 1 + fi + echo "$inet" +} + +start_cmd=pptp_start +stop_cmd=pptp_stop +status_cmd=pptp_status +iface_cmd=pptp_iface +inet_cmd=pptp_inet + +load_rc_config $name +run_rc_command "$1" |