lede-packages-rs

git clone git://archive.git.mtrnord.blog/MTRNord/lede-packages-rs.git
Log | Files | Refs | README | LICENSE

obfsproxy.init (3695B)


      1 #!/bin/sh /etc/rc.common
      2 # Copyright (C) 2016 OpenWrt.org
      3 
      4 START=80
      5 STOP=20
      6 USE_PROCD=1
      7 
      8 PROG=/usr/bin/obfsproxy
      9 
     10 append_arg() {
     11 	local cfg="$1"
     12 	local var="$2"
     13 	local opt="$3"
     14 	local def="$4"
     15 	local val
     16 
     17 	config_get val "$cfg" "$var"
     18 	[ -n "$val" -o -n "$def" ] && procd_append_param command "$opt" "${val:-$def}"
     19 }
     20 
     21 append_bool() {
     22 	local cfg="$1"
     23 	local var="$2"
     24 	local opt="$3"
     25 	local def="$4"
     26 	local val
     27 
     28 	config_get_bool val "$cfg" "$var" "$def"
     29 	[ "$val" = 1 ] && procd_append_param command "$opt"
     30 }
     31 
     32 append_plain() {
     33 	procd_append_param command "$1"
     34 }
     35 
     36 append_param() {
     37 	local cfg="$1"
     38 	local var="$2"
     39 	local opt="$3"
     40 	local def="$4"
     41 	local val
     42 
     43 	config_get val "$cfg" "$var"
     44 	[ -n "$val" -o -n "$def" ] && procd_append_param "$opt" "${val:-$def}"
     45 }
     46 
     47 append_proxy_spec() {
     48 	local cfg="$1"
     49 	local scheme_var="$2"
     50 	local username_var="$3"
     51 	local password_var="$4"
     52 	local host_var="$5"
     53 	local port_var="$6"
     54 	local opt="$7"
     55 	local def="$8"
     56 	local scheme
     57 	local username
     58 	local password
     59 	local host
     60 	local port
     61 	local login
     62 	local val
     63 
     64 	config_get scheme "$cfg" "$scheme_var"
     65 	config_get username "$cfg" "$username_var"
     66 	config_get password "$cfg" "$password_var"
     67 	config_get host "$cfg" "$host_var"
     68 	config_get port "$cfg" "$port_var"
     69 	[ "$username" ] && login="$username${password:+:$password}@"
     70 	[ -n "$scheme" -a -n "$host" -a -n "$port" ] && val="$scheme://$login$host:$port"
     71 	[ -n "$val" -o -n "$def" ] && procd_append_param command "$opt" "${val:-$def}"
     72 }
     73 
     74 append_host_port() {
     75 	local cfg="$1"
     76 	local host_var="$2"
     77 	local port_var="$3"
     78 	local opt="$4"
     79 	local def="$5"
     80 	local host
     81 	local port
     82 	local val
     83 
     84 	config_get host "$cfg" "$host_var"
     85 	config_get port "$cfg" "$port_var"
     86 	[ -n "$host" -a -n "$port" ] && val="$host:$port"
     87 	[ -n "$val" -o -n "$def" ] && {
     88 		[ "$opt" ] && procd_append_param command "$opt"
     89 		procd_append_param command "${val:-$def}"
     90 	}
     91 }
     92 
     93 start_instance() {
     94 	local cfg="$1"
     95 	local lib_dir="/var/lib/obfsproxy/$cfg"
     96 	local redirect=0
     97 	local enabled
     98 	local user
     99 	local transport
    100 	local password
    101 	local log_min_severity
    102 
    103 	config_get_bool enabled "$cfg" 'enabled' '0'
    104 	[ "$enabled" = 0 ] && return 1
    105 
    106 	config_get user "$cfg" 'user' 'root'
    107 	config_get transport "$cfg" 'transport'
    108 	[ "$transport" = "scramblesuit" ] && config_get password "$cfg" 'password'
    109 
    110 	[ -d "$lib_dir" ] || {
    111 		mkdir -m 0755 -p "$lib_dir/data"
    112 		chmod -R 0700 "$lib_dir"
    113 	}
    114 	[ "$password" ] && {
    115 		echo "$password" > "$lib_dir/secret"
    116 		chmod 0600 "$lib_dir/secret"
    117 	}
    118 	chown -R "$user:" "$lib_dir"
    119 
    120 	config_get log_min_severity "$cfg" 'log_min_severity'
    121 	[ "$log_min_severity" = "debug" ] && redirect=1
    122 
    123 	procd_open_instance
    124 
    125 	procd_set_param command "$PROG" --data-dir "$lib_dir/data" --syslog "obfsproxy($cfg)"
    126 
    127 	append_arg "$cfg" log_file "--log-file"
    128 	append_arg "$cfg" log_min_severity "--log-min-severity"
    129 	append_bool "$cfg" no_log "--no-log"
    130 	append_bool "$cfg" no_safe_logging "--no-safe-logging"
    131 	append_proxy_spec "$cfg" proxy_scheme proxy_username proxy_password proxy_host proxy_port "--proxy"
    132 
    133 	append_param "$cfg" transport command
    134 	[ "$transport" = "obfs2" ] && append_arg "$cfg" password "--shared-secret"
    135 	[ "$password" ] && procd_append_param command "--password-file" "$lib_dir/secret"
    136 
    137 	append_param "$cfg" mode command
    138 	append_host_port "$cfg" dest_host dest_port "--dest"
    139 	append_arg "$cfg" ext_cookie_file "--ext-cookie-file"
    140 
    141 	append_host_port "$cfg" listen_host listen_port
    142 
    143 	procd_set_param respawn
    144 	procd_set_param stdout $redirect
    145 	procd_set_param stderr $redirect
    146 	append_param "$cfg" user user
    147 
    148 	procd_close_instance
    149 }
    150 
    151 service_triggers() {
    152 	procd_add_reload_trigger obfsproxy
    153 }
    154 
    155 start_service() {
    156 	config_load obfsproxy
    157 	config_foreach start_instance obfsproxy
    158 }