Add support for generating keys to the init script
This commit is contained in:
parent
cc6e38f2c9
commit
82c6942d46
|
@ -1,9 +1,9 @@
|
||||||
#!/bin/sh /etc/rc.common
|
#!/bin/sh /etc/rc.common
|
||||||
# Copyright (C) 2012 OpenWrt.org
|
# Copyright (C) 2012-2013 OpenWrt.org
|
||||||
|
|
||||||
START=95
|
START=95
|
||||||
|
|
||||||
EXTRA_COMMANDS="up down show_key"
|
EXTRA_COMMANDS="up down show_key generate_key"
|
||||||
|
|
||||||
LIST_SEP="
|
LIST_SEP="
|
||||||
"
|
"
|
||||||
|
@ -34,7 +34,7 @@ append_opts_bool() {
|
||||||
local p; local v; local s="$1"; shift
|
local p; local v; local s="$1"; shift
|
||||||
for p in $*; do
|
for p in $*; do
|
||||||
config_get_bool v "$s" "$p" 0
|
config_get_bool v "$s" "$p" 0
|
||||||
[ "$v" == 1 ] && append_opt_bool "$p"
|
[ "$v" = 1 ] && append_opt_bool "$p"
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,6 +54,46 @@ error() {
|
||||||
echo "${initscript}:" "$@" 1>&2
|
echo "${initscript}:" "$@" 1>&2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get_key_instance() {
|
||||||
|
local s="$1"
|
||||||
|
|
||||||
|
config_get secret "$s" secret
|
||||||
|
if [ "$secret" = 'generate' ]; then
|
||||||
|
secret=`fastd --generate-key --machine-readable`
|
||||||
|
uci -q set fastd."$s".secret="$secret" && uci -q commit fastd
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$secret"
|
||||||
|
}
|
||||||
|
|
||||||
|
generate_key_instance() {
|
||||||
|
local s="$1"
|
||||||
|
|
||||||
|
config_get secret "$s" secret
|
||||||
|
if [ -z "$secret" -o "$secret" = 'generate' ]; then
|
||||||
|
secret=`fastd --generate-key --machine-readable`
|
||||||
|
uci -q set fastd."$s".secret="$secret" && uci -q commit fastd
|
||||||
|
fi
|
||||||
|
|
||||||
|
"$FASTD_COMMAND" --config - --show-key --machine-readable <<EOF
|
||||||
|
secret "$secret";
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
show_key_instance() {
|
||||||
|
local s="$1"
|
||||||
|
|
||||||
|
local secret=`get_key_instance "$s"`
|
||||||
|
if [ -z "$secret" ]; then
|
||||||
|
error "$s: secret is not set"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
"$FASTD_COMMAND" --config - --show-key --machine-readable <<EOF
|
||||||
|
secret "$secret";
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
start_instance() {
|
start_instance() {
|
||||||
local s="$1"
|
local s="$1"
|
||||||
|
|
||||||
|
@ -73,7 +113,7 @@ start_instance() {
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
config_get secret "$s" secret
|
local secret=`get_key_instance "$s"`
|
||||||
if [ -z "$secret" ]; then
|
if [ -z "$secret" ]; then
|
||||||
error "$s: secret is not set"
|
error "$s: secret is not set"
|
||||||
return 1
|
return 1
|
||||||
|
@ -83,10 +123,9 @@ start_instance() {
|
||||||
append_opts "$s" syslog_level mode interface mtu
|
append_opts "$s" syslog_level mode interface mtu
|
||||||
append_opts_bool "$s" forward
|
append_opts_bool "$s" forward
|
||||||
|
|
||||||
mkdir -p "$TMP_FASTD"
|
eval service_start "'$FASTD_COMMAND'" --daemon --pid-file "'$SERVICE_PID_FILE'" --syslog-level info $OPTS --config - <<EOF
|
||||||
echo "secret \"$secret\";" > "$TMP_FASTD/secret.$s.conf"
|
secret "$secret";
|
||||||
|
EOF
|
||||||
eval service_start "'$FASTD_COMMAND'" --daemon --pid-file "'$SERVICE_PID_FILE'" --syslog-level info $OPTS --config "'$TMP_FASTD/secret.$s.conf'"
|
|
||||||
|
|
||||||
if ! ifconfig "$interface" >/dev/null 2>&1; then
|
if ! ifconfig "$interface" >/dev/null 2>&1; then
|
||||||
error "$s: startup failed"
|
error "$s: startup failed"
|
||||||
|
@ -119,23 +158,6 @@ stop_instance() {
|
||||||
[ -n "$down" ] && sh -c "$down" - "$interface"
|
[ -n "$down" ] && sh -c "$down" - "$interface"
|
||||||
|
|
||||||
service_stop "$FASTD_COMMAND"
|
service_stop "$FASTD_COMMAND"
|
||||||
|
|
||||||
rm -f "$TMP_FASTD/secret.$s.conf"
|
|
||||||
}
|
|
||||||
|
|
||||||
show_key_instance() {
|
|
||||||
local s="$1"
|
|
||||||
|
|
||||||
config_get secret "$s" secret
|
|
||||||
if [ -z "$secret" ]; then
|
|
||||||
error "$s: secret is not set"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
mkdir -p "$TMP_FASTD"
|
|
||||||
echo "secret \"$secret\";" > "$TMP_FASTD/secret.$s.conf"
|
|
||||||
|
|
||||||
"$FASTD_COMMAND" --config "$TMP_FASTD/secret.$s.conf" --show-key --machine-readable
|
|
||||||
}
|
}
|
||||||
|
|
||||||
reload_instance() {
|
reload_instance() {
|
||||||
|
@ -168,7 +190,7 @@ up() {
|
||||||
config_load 'fastd'
|
config_load 'fastd'
|
||||||
for instance in "$@"; do
|
for instance in "$@"; do
|
||||||
config_get exists "$instance" 'TYPE'
|
config_get exists "$instance" 'TYPE'
|
||||||
if [ "$exists" == "fastd" ]; then
|
if [ "$exists" = 'fastd' ]; then
|
||||||
start_instance "$instance"
|
start_instance "$instance"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
@ -180,7 +202,7 @@ down() {
|
||||||
config_load 'fastd'
|
config_load 'fastd'
|
||||||
for instance in "$@"; do
|
for instance in "$@"; do
|
||||||
config_get exists "$instance" 'TYPE'
|
config_get exists "$instance" 'TYPE'
|
||||||
if [ "$exists" == "fastd" ]; then
|
if [ "$exists" = 'fastd' ]; then
|
||||||
stop_instance "$instance"
|
stop_instance "$instance"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
@ -192,8 +214,20 @@ show_key() {
|
||||||
config_load 'fastd'
|
config_load 'fastd'
|
||||||
for instance in "$@"; do
|
for instance in "$@"; do
|
||||||
config_get exists "$instance" 'TYPE'
|
config_get exists "$instance" 'TYPE'
|
||||||
if [ "$exists" == "fastd" ]; then
|
if [ "$exists" = 'fastd' ]; then
|
||||||
show_key_instance "$instance"
|
show_key_instance "$instance"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
generate_key() {
|
||||||
|
local exists
|
||||||
|
local instance
|
||||||
|
config_load 'fastd'
|
||||||
|
for instance in "$@"; do
|
||||||
|
config_get exists "$instance" 'TYPE'
|
||||||
|
if [ "$exists" = 'fastd' ]; then
|
||||||
|
generate_key_instance "$instance"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue