b.liu | e958203 | 2025-04-17 19:18:16 +0800 | [diff] [blame] | 1 | #!/bin/sh /etc/rc.common |
| 2 | # Copyright (C) 2015 OpenWrt.org |
| 3 | |
| 4 | START=60 |
| 5 | USE_PROCD=1 |
| 6 | |
| 7 | BIN=/usr/sbin/pptpd |
| 8 | CONFIG=/var/etc/pptpd.conf |
| 9 | CHAP_SECRETS=/var/etc/chap-secrets |
| 10 | OPTIONS_PPTP=/var/etc/options.pptpd |
| 11 | |
| 12 | validate_login_section() { |
| 13 | uci_load_validate pptpd login "$1" "$2" \ |
| 14 | 'username:string' \ |
| 15 | 'password:string' \ |
| 16 | 'remoteip:string' |
| 17 | } |
| 18 | |
| 19 | validate_pptpd_section() { |
| 20 | uci_load_validate pptpd service "$1" "$2" \ |
| 21 | 'enabled:bool:1' \ |
| 22 | 'localip:string' \ |
| 23 | 'remoteip:string' \ |
| 24 | 'mppe:list(string):required no40 no56 stateless' \ |
| 25 | 'logwtmp:bool:0' |
| 26 | } |
| 27 | |
| 28 | setup_login() { |
| 29 | [ "$2" = 0 ] || { |
| 30 | echo "validation failed" |
| 31 | return 1 |
| 32 | } |
| 33 | |
| 34 | [ -n "$username" ] || return 0 |
| 35 | [ -n "$password" ] || return 0 |
| 36 | [ -n "$remoteip" ] || remoteip=* |
| 37 | |
| 38 | echo "$username pptp-server $password $remoteip" >> $CHAP_SECRETS |
| 39 | } |
| 40 | |
| 41 | setup_config() { |
| 42 | [ "$2" = 0 ] || { |
| 43 | echo "validation failed" |
| 44 | return 1 |
| 45 | } |
| 46 | |
| 47 | [ "$enabled" -eq 0 ] && return 1 |
| 48 | |
| 49 | mkdir -p /var/etc |
| 50 | cp /etc/pptpd.conf $CONFIG |
| 51 | cp /etc/ppp/options.pptpd $OPTIONS_PPTP |
| 52 | |
| 53 | [ -n "$localip" ] && echo "localip $localip" >> $CONFIG |
| 54 | [ -n "$remoteip" ] && echo "remoteip $remoteip" >> $CONFIG |
| 55 | [ "$logwtmp" -eq 1 ] && echo "logwtmp" >> $CONFIG |
| 56 | |
| 57 | echo "mppe $(echo $mppe | sed -e 's/\s/,/g')" >> $OPTIONS_PPTP |
| 58 | |
| 59 | return 0 |
| 60 | } |
| 61 | |
| 62 | start_service() { |
| 63 | config_load pptpd |
| 64 | validate_pptpd_section pptpd setup_config || return |
| 65 | config_foreach validate_login_section login setup_login |
| 66 | |
| 67 | ln -sfn $CHAP_SECRETS /etc/ppp/chap-secrets |
| 68 | |
| 69 | procd_open_instance |
| 70 | procd_set_param command $BIN -c $CONFIG --fg -o $OPTIONS_PPTP |
| 71 | procd_close_instance |
| 72 | } |
| 73 | |
| 74 | service_triggers () { |
| 75 | procd_add_reload_trigger "pptpd" |
| 76 | |
| 77 | procd_open_validate |
| 78 | validate_pptpd_section |
| 79 | validate_login_section |
| 80 | procd_close_validate |
| 81 | } |