Index: head/net/pptpclient/Makefile =================================================================== --- head/net/pptpclient/Makefile (revision 408594) +++ head/net/pptpclient/Makefile (revision 408595) @@ -1,33 +1,34 @@ # Created by: John Polstra # $FreeBSD$ PORTNAME= pptpclient PORTVERSION= 1.8.0 -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= net MASTER_SITES= SF/${PORTNAME}/pptp/pptp-${PORTVERSION} DISTNAME= pptp-${PORTVERSION} MAINTAINER= ports@FreeBSD.org 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 PLIST_FILES= sbin/pptp man/man8/pptp.8.gz PORTEXAMPLES= README ppp.conf OPTIONS_DEFINE= EXAMPLES do-install: ${INSTALL_PROGRAM} ${WRKSRC}/pptp ${STAGEDIR}${PREFIX}/sbin @${MKDIR} ${STAGEDIR}${EXAMPLESDIR} ${INSTALL_DATA} ${FILESDIR}/README ${STAGEDIR}${EXAMPLESDIR} ${INSTALL_DATA} ${FILESDIR}/ppp.conf ${STAGEDIR}${EXAMPLESDIR} ${INSTALL_MAN} ${WRKSRC}/pptp.8 ${STAGEDIR}${MANPREFIX}/man/man8 .include Index: head/net/pptpclient/files/README =================================================================== --- head/net/pptpclient/files/README (revision 408594) +++ head/net/pptpclient/files/README (revision 408595) @@ -1,30 +1,41 @@ Quickstart for the PPTP client. Set up your /etc/ppp/ppp.conf based on the example in this directory. Make these substitutions: SERVER IP address of the PPTP server LABEL PPP label to use (must be the same on the command line and in the ppp.conf file) USER Your account name on the server PASSWORD Your password on the server Change the "add" commands in ppp.conf to set up the routing appropriately. Note: your PPP program must be new enough to support MS-CHAP authentication. You must run the program as root. Use a command like this: pptp SERVER LABEL Kill it with ^C when you're done. 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 + +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 Index: head/net/pptpclient/files/pptp.in =================================================================== --- head/net/pptpclient/files/pptp.in (nonexistent) +++ head/net/pptpclient/files/pptp.in (revision 408595) @@ -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" Property changes on: head/net/pptpclient/files/pptp.in ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:keywords ## -0,0 +1 ## +FreeBSD=%H \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property