#!/bin/sh /etc/rc.common USE_PROCD=1 START=90 STOP=10 NAME="vlmcsd" CONF="$NAME" PROG="/usr/bin/vlmcsd" INI_FILE="/etc/vlmcsd.ini" KMS_PORT="1688" DHCP_SECTION="$NAME" normalize_bool() { case "$1" in 1|on|true|yes|enabled) return 0 ;; *) return 1 ;; esac } config_get_bool_compat() { local __var="$1" local section="$2" local option="$3" local default="${4:-0}" local legacy_option="$5" local value config_get value "$section" "$option" if [ -z "$value" ] && [ -n "$legacy_option" ]; then config_get value "$section" "$legacy_option" fi if normalize_bool "${value:-$default}"; then eval "$__var=1" else eval "$__var=0" fi } reload_dnsmasq() { [ -x /etc/init.d/dnsmasq ] || return 0 /etc/init.d/dnsmasq reload >/dev/null 2>&1 || \ /etc/init.d/dnsmasq restart >/dev/null 2>&1 || true } sync_dns_srv() { local enabled="$1" local before after hostname domain srv target before="$(uci -q show "dhcp.${DHCP_SECTION}" 2>/dev/null)" uci -q delete "dhcp.${DHCP_SECTION}" if [ "$enabled" = "1" ]; then hostname="$(uci -q get system.@system[0].hostname)" domain="$(uci -q get dhcp.@dnsmasq[0].domain)" [ -n "$hostname" ] || hostname="OpenWrt" srv="_vlmcs._tcp" target="$hostname" if [ -n "$domain" ]; then srv="${srv}.${domain}" target="${target}.${domain}" fi uci -q set "dhcp.${DHCP_SECTION}=srvhost" uci -q set "dhcp.${DHCP_SECTION}.srv=${srv}" uci -q set "dhcp.${DHCP_SECTION}.target=${target}" uci -q set "dhcp.${DHCP_SECTION}.port=${KMS_PORT}" fi after="$(uci -q show "dhcp.${DHCP_SECTION}" 2>/dev/null)" [ "$before" = "$after" ] && return 0 uci -q commit dhcp reload_dnsmasq } start_service() { local enabled auto_activate internet_access config_load "$CONF" config_get_bool_compat enabled config enabled 0 config_get_bool_compat auto_activate config auto_activate 1 autoactivate config_get_bool_compat internet_access config internet_access 0 if [ "$enabled" -ne 1 ]; then sync_dns_srv 0 return 1 fi [ -x "$PROG" ] || return 1 sync_dns_srv "$auto_activate" procd_open_instance "$NAME" procd_set_param command "$PROG" -D -i "$INI_FILE" -L "0.0.0.0:${KMS_PORT}" procd_set_param file "$INI_FILE" procd_set_param respawn procd_set_param stdout 1 procd_set_param stderr 1 if [ "$internet_access" -eq 1 ]; then procd_open_data json_add_array firewall json_add_object "" json_add_string type rule json_add_string name "Allow-vlmcsd" json_add_string proto "tcp" json_add_string src "*" json_add_string dest_port "$KMS_PORT" json_add_string target "ACCEPT" json_close_object json_close_array procd_close_data fi procd_close_instance } stop_service() { sync_dns_srv 0 } service_triggers() { procd_add_reload_trigger "$CONF" dhcp system } reload_service() { restart }