Просмотр исходного кода

New global input validation method for object key-value strings [parse_object_kv_list]

Robert Zollner 6 лет назад
Родитель
Сommit
6ae7a1e57a
1 измененных файлов с 29 добавлено и 0 удалено
  1. 29 0
      func/main.sh

+ 29 - 0
func/main.sh

@@ -246,6 +246,35 @@ is_object_valid() {
     fi
 }
 
+# Check if a object string with key values pairs has the correct format and load it afterwards
+parse_object_kv_list() {
+    local str
+    local objkv
+    local suboutput
+    local OLD_IFS="$IFS"
+
+    str=${@//$'\n'/ }
+    str=${str//\"/\\\"}
+    IFS=$'\n'
+
+    suboutput=$(sudo -u nobody bash -c "PS4=''; set -xe; eval \"${str}\"" 2>&1)
+    check_result $? "Invalid object format: ${str}" $E_INVALID
+
+    for objkv in $suboutput; do
+
+        if [[ "$objkv" =~ ^'eval ' ]]; then
+          continue
+        fi
+
+        if ! [[ "$objkv" =~ ^([[:alnum:]][_[:alnum:]]{0,64}[[:alnum:]])=(\'?[^\']+?\'?)?$ ]]; then
+            check_result $E_INVALID "Invalid key value format [$objkv]"
+        fi
+
+        eval "$objkv"
+    done
+    IFS="$OLD_IFS"
+}
+
 # Check if object is supended
 is_object_suspended() {
     if [ $2 = 'USER' ]; then