procd: update to latest git head
[15.05/openwrt.git] / package / system / procd / files / procd.sh
index 5327c1d..7b8640a 100644 (file)
@@ -68,9 +68,7 @@ _procd_open_service() {
 
 _procd_close_service() {
        json_close_object
-       _procd_open_trigger
        service_triggers
-       _procd_close_trigger
        _procd_ubus_call set
 }
 
@@ -117,6 +115,10 @@ _procd_open_trigger() {
        json_add_array "triggers"
 }
 
+_procd_open_validate() {
+       json_add_array "validate"
+}
+
 _procd_set_param() {
        local type="$1"; shift
 
@@ -135,7 +137,8 @@ _procd_set_param() {
 
 _procd_add_config_trigger() {
        json_add_array
-       _procd_add_array_data "config.change"
+       _procd_add_array_data "$1"
+       shift
 
        json_add_array
        _procd_add_array_data "if"
@@ -158,14 +161,15 @@ _procd_add_reload_trigger() {
        local script=$(readlink "$initscript")
        local name=$(basename ${script:-$initscript})
 
-       _procd_add_config_trigger $1 /etc/init.d/$name reload
+       _procd_open_trigger
+       _procd_add_config_trigger "config.change" $1 /etc/init.d/$name reload
+       _procd_close_trigger
 }
 
-_procd_add_reload_trigger() {
-       local script=$(readlink "$initscript")
-       local name=$(basename ${script:-$initscript})
-
-       _procd_add_config_trigger $1 /etc/init.d/$name reload
+_procd_add_validation() {
+       _procd_open_validate
+       $@
+       _procd_close_validate
 }
 
 _procd_append_param() {
@@ -191,6 +195,10 @@ _procd_close_trigger() {
        json_close_array
 }
 
+_procd_close_validate() {
+       json_close_array
+}
+
 _procd_add_instance() {
        _procd_open_instance
        _procd_set_param command "$@"
@@ -207,6 +215,63 @@ _procd_kill() {
        _procd_ubus_call delete
 }
 
+uci_validate_section()
+{
+       local error=0
+
+       [ "$4" = "" ] && return 1
+       [ "$3" = "" ] && {
+               json_add_object
+               json_add_string "package" "$1"
+               json_add_string "type" "$2"
+               json_add_object "data"
+
+               shift; shift; shift
+
+               while [ -n "$1" ]; do
+                       json_add_string "${1%:*}" "${1#*:}"
+                       shift
+               done
+
+               json_close_object
+               json_close_object
+               return 0
+       }
+
+       local section="${3}"
+       config_load "${1}"
+       shift; shift; shift
+
+       while [ -n "$1" ]; do
+               local name=${1%%:*}
+               local tmp=${1#*:}
+               local type=${tmp%%:*}
+               local default=""
+
+               [ "$tmp" = "$type" ] || default=${tmp#*:}
+
+               shift
+               config_get "${name}" "${section}" "${name}"
+               eval val=\$$name
+
+               [ "$type" = "bool" ] && {
+                       case "$val" in
+                       1|on|true|enabled) val=1;;
+                       0|off|false|disabled) val=0;;
+                       *) val="";;
+                       esac
+               }
+               [ -z "$val" ] && val=${default}
+               eval $name=\"$val\"
+               [ -z "$val" ] || {
+                       /sbin/validate_data "${type}" "${val}"
+                       [ $? -eq 0 ] || error="$((error + 1))"
+               }
+       done
+
+       return $error
+}
+
 _procd_wrapper \
        procd_open_service \
        procd_close_service \
@@ -219,4 +284,5 @@ _procd_wrapper \
        procd_close_instance \
        procd_set_param \
        procd_append_param \
+       procd_add_validation \
        procd_kill