[hamradio-commits] [dump1090-mutability] 34/172: Add input validation to most of the config questions.

Matteo F. Vescovi mfv at moszumanska.debian.org
Sun Jan 28 13:45:43 UTC 2018


This is an automated email from the git hooks/post-receive script.

mfv pushed a commit to branch master
in repository dump1090-mutability.

commit b01599f5687971001178b90a26095a6bee6ab237
Author: Oliver Jowett <oliver at mutability.co.uk>
Date:   Wed Dec 10 20:26:51 2014 +0000

    Add input validation to most of the config questions.
    
    > Some people, when confronted with a problem, think "I know, I'll use regular expressions."
    > Now they have two problems.
    
    Dongle "device index" actually accepts serial numbers too, document that.
---
 debian/changelog                     |   2 +
 debian/config-template               |   2 +-
 debian/dump1090-mutability.config    | 143 ++++++++++++++++++++++++++++++-----
 debian/dump1090-mutability.templates |  74 ++++++++++++++----
 4 files changed, 185 insertions(+), 36 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index 5da9885..e574d93 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -7,6 +7,8 @@ dump1090-mutability (1.08.2302.14+1mu-3) UNRELEASED; urgency=medium
   * Use the package version as the version number compiled into the binary.
   * Add data/receiver.json (generated once) and support for it in script.js.
   * Internal webserver rearrangement to support multiple json files.
+  * Dongle "device index" actually accepts serial numbers too, document that.
+  * Add input validation to most of the config questions.
 
  -- Oliver Jowett <oliver at mutability.co.uk>  Wed, 10 Dec 2014 02:01:27 +0000
 
diff --git a/debian/config-template b/debian/config-template
index ad16795..4c723fc 100644
--- a/debian/config-template
+++ b/debian/config-template
@@ -19,7 +19,7 @@ LOGFILE=
 # Receiver options
 #
 
-# RTLSDR device index to use
+# RTLSDR device index or serial number to use
 # If set to "none", dump1090 will be started in --net-only mode
 DEVICE=
 
diff --git a/debian/dump1090-mutability.config b/debian/dump1090-mutability.config
index 9cd1b50..74e49fe 100644
--- a/debian/dump1090-mutability.config
+++ b/debian/dump1090-mutability.config
@@ -52,47 +52,148 @@ fi
 
 # Ask questions.
 
+db_input_verify() {
+  # $1 = priority
+  # $2 = db key
+  # $3 = verification function, should return 0 if OK
+  PRI=$1; KEY=$2; VERIFY=$3
+
+  set +e
+  db_input $PRI $KEY; RESULT=$?
+  db_go
+  set -e
+  while :
+  do
+    db_get $KEY
+    if $VERIFY $RET; then return 0; fi
+    if [ $RESULT -ne 0 ]; then
+      # db_input failed, and the existing value does not validate
+      if [ $RESULT = 30 ] && [ $PRI != high ]
+      then
+        # question wasn't displayed, but existing value is invalid
+        # bump priority and try again
+        PRI=high
+      else
+       # give up, use the default value
+       db_reset $KEY
+       return 0
+      fi
+    fi
+
+    # db_input was OK, but the value did not verify.
+    # display an error and try again.   
+    set +e
+    db_input high dump1090-mutability/invalid-$VERIFY
+    db_fset $KEY seen false
+    db_input high $KEY; RESULT=$?
+    db_go
+    set -e
+  done
+}
+       
+is_unsigned_int() {
+  if echo "$1" | grep -Eq '^(0|+?[1-9][0-9]*)$'; then return 0; else return 1; fi
+}
+
+is_unsigned_int_or_empty() {
+  if [ -z "$1" ]; then return 0
+  elif is_unsigned_int "$1"; then return 0
+  else return 1; fi
+}
+
+is_signed_int() {
+  if echo "$1" | grep -Eq '^(0|[+-]?[1-9][0-9]*)$'; then return 0; else return 1; fi
+}
+
+is_signed_int_or_empty() {
+  if [ -z "$1" ]; then return 0
+  elif is_signed_int "$1"; then return 0
+  else return 1; fi
+}
+
+is_ipaddrish() {
+  if echo "$1" | grep -Eq '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$'; then return 0; else return 1; fi
+}
+
+is_ipaddrish_or_empty() {
+  if [ -z "$1" ]; then return 0
+  elif is_ipaddrish "$1"; then return 0
+  else return 1; fi
+}
+
+is_number() {
+  if echo "$1" | grep -Eq '^(0|[+-]?[1-9][0-9]*)(\.[0-9]+)?$'; then return 0; else return 1; fi
+}
+
+is_number_or_empty() {
+  if [ -z "$1" ]; then return 0
+  elif is_number "$1"; then return 0;
+  else return 1; fi
+}
+
+is_valid_gain() {
+  if is_number "$1"; then return 0;
+  elif [ "$1" = "max" ]; then return 0;
+  elif [ "$1" = "agc" ]; then return 0;
+  else return 1; fi
+}
+
+is_not_empty() {
+  if [ -z "$1" ]; then return 1; else return 0; fi
+}    
+
+is_port_number() {
+  if is_unsigned_int "$1"; then
+    if [ "$1" -eq 0 ]; then return 0; fi
+    if [ "$1" -lt 1024 ]; then return 1; fi
+    if [ "$1" -gt 65535 ]; then return 1; fi
+    return 0
+  else
+    return 1
+  fi
+}
+
 db_input high $NAME/auto-start || true
 
 db_go || true; db_get $NAME/auto-start; if [ "$RET" = "true" ]; then
  # all of these are only relevant if the init script is enabled
 
- db_input low $NAME/run-as-user || true
- db_input low $NAME/log-file || true
+ db_input_verify low $NAME/run-as-user is_not_empty || true
+ db_input_verify low $NAME/log-file is_not_empty || true
 
  db_input medium $NAME/rtlsdr-device || true
 
  db_go || true; db_get $NAME/rtlsdr-device; if [ "x$RET" != "xnone" ]; then
   # only if a real device was chosen:
-  db_input medium $NAME/rtlsdr-gain || true
-  db_input medium $NAME/rtlsdr-ppm || true
+  db_input_verify medium $NAME/rtlsdr-gain is_valid_gain || true
+  db_input_verify medium $NAME/rtlsdr-ppm is_signed_int || true
   db_input low $NAME/rtlsdr-oversample || true
  fi
 
  db_input low $NAME/decode-fix-crc || true
  db_input low $NAME/decode-aggressive || true
- db_input medium $NAME/decode-lat || true
+ db_input_verify medium $NAME/decode-lat is_number_or_empty || true
 
  db_go || true; db_get $NAME/decode-lat; if [ -n "$RET" ]; then
   # only if latitude was given:
-  db_input medium $NAME/decode-lon || true
+  db_input_verify medium $NAME/decode-lon is_number_or_empty || true
  fi
 
- db_input medium $NAME/net-http-port || true
- db_input low $NAME/net-ri-port || true
- db_input low $NAME/net-ro-port || true
- db_input low $NAME/net-bi-port || true
- db_input low $NAME/net-bo-port || true
- db_input low $NAME/net-sbs-port || true
- db_input low $NAME/net-fatsv-port || true
- db_input low $NAME/net-heartbeat || true
- db_input low $NAME/net-out-size || true
- db_input low $NAME/net-out-interval || true
- db_input low $NAME/net-buffer || true
- db_input medium $NAME/net-bind-address || true
-
- db_input low $NAME/stats-interval || true
- db_input low $NAME/json-interval || true
+ db_input_verify medium $NAME/net-http-port is_port_number || true
+ db_input_verify low $NAME/net-ri-port is_port_number || true
+ db_input_verify low $NAME/net-ro-port is_port_number || true
+ db_input_verify low $NAME/net-bi-port is_port_number || true
+ db_input_verify low $NAME/net-bo-port is_port_number || true
+ db_input_verify low $NAME/net-sbs-port is_port_number || true
+ db_input_verify low $NAME/net-fatsv-port is_port_number || true
+ db_input_verify low $NAME/net-heartbeat is_unsigned_int || true
+ db_input_verify low $NAME/net-out-size is_unsigned_int || true
+ db_input_verify low $NAME/net-out-interval is_unsigned_int || true
+ db_input_verify low $NAME/net-buffer is_unsigned_int || true
+ db_input_verify medium $NAME/net-bind-address is_ipaddrish_or_empty || true
+
+ db_input_verify low $NAME/stats-interval is_unsigned_int || true
+ db_input_verify low $NAME/json-interval is_unsigned_int || true
 
  db_go || true; db_get $NAME/json-interval; if [ -n "$RET" ] && [ "$RET" -gt 0 ]; then
   # only if json-interval was given and non-zero
diff --git a/debian/dump1090-mutability.templates b/debian/dump1090-mutability.templates
index 92e4902..2e14b57 100644
--- a/debian/dump1090-mutability.templates
+++ b/debian/dump1090-mutability.templates
@@ -2,6 +2,10 @@ Template: dump1090-mutability/auto-start
 Description: Start dump1090 automatically?
  dump1090 can be started automatically via an init-script.
  Otherwise, the init-script does nothing; you must run dump1090 by hand.
+ .
+ You can modify the options used when automatically starting
+ dump1090 by running "dpkg-reconfigure dump1090-mutability" as root,
+ or by editing /etc/default/dump1090-mutability.
 Type: boolean
 Default: true
 
@@ -21,12 +25,15 @@ Default: /var/log/dump1090-mutability.log
 
 Template: dump1090-mutability/rtlsdr-device
 Description: RTL-SDR dongle to use:
- If you have only one dongle connected, select 0. If you have more than one
- dongle connected, select the index of the dongle to use (0 is the first
- dongle). If you want to run dump1090 in "net only" mode, select "none".
-Type: select
-Choices: none, 0, 1, 2, 3, 4, 5
-Default: 0
+ If you have only one dongle connected, you can leave this blank.
+ .
+ Otherwise, you can provide the serial number (more reliable) or device
+ index (first device = 0, but the ordering is unpredictable) to choose
+ a particular dongle to use.
+ .
+ To run dump1090 in "net only" mode, specify the literal word "none".
+Type: string
+Default:
 
 Template: dump1090-mutability/rtlsdr-gain
 Description: RTL-SDR gain, in dB:
@@ -208,19 +215,22 @@ Default: 3600
 
 Template: dump1090-mutability/json-dir
 Description: Directory to write JSON aircraft state to:
- dump1090 periodicallys write a list of aircraft, in JSON format, for use
- by the virtual radar view when using an external webserver. This setting
- controls the directory to write to.
- .
- As this is written frequently (by default, once a second), you should
- probably select a location that is not on a sdcard. The default path
- under /run is on tmpfs and will not write to the sdcard.
+ As this can be written frequently, you should select a location
+ that is not on a sdcard. The default path under /run is on tmpfs
+ and will not write to the sdcard.
 Type: string
 Default: /run/dump1090-mutability
 
 Template: dump1090-mutability/json-interval
 Description: Interval between writing JSON aircraft state, in seconds:
- Here you can control how often the JSON state is updated.
+ dump1090 periodically write a list of aircraft, in JSON format, for use
+ by the virtual radar view when using an external webserver. This setting
+ controls the directory to write to.
+ .
+ Here you can control how often the JSON state is updated, which determines
+ how frequently the virtual radar view updates.
+ .
+ A value of 0 will disable writing JSON state entirely.
 Type: string
 Default: 1
 
@@ -229,3 +239,39 @@ Description: Extra arguments to pass to dump1090:
  Here you can add any extra arguments you want to pass to dump1090.
 Type: string
 Default:
+
+Template: dump1090-mutability/invalid-is_unsigned_int
+Description: Value must be an unsigned integer.
+Type: error
+
+Template: dump1090-mutability/invalid-is_unsigned_int_or_empty
+Description: Value must be an unsigned integer, or blank.
+Type: error
+
+Template: dump1090-mutability/invalid-is_signed_int
+Description: Value must be an integer.
+Type: error
+
+Template: dump1090-mutability/invalid-is_signed_int_or_empty
+Description: Value must be an integer, or blank.
+Type: error
+
+Template: dump1090-mutability/invalid-is_not_empty
+Description: Value cannot be empty.
+Type: error
+
+Template: dump1090-mutability/invalid-is_port_number
+Description: Value must be a valid port number (1024-65535), or zero to disable.
+Type: error
+
+Template: dump1090-mutability/invalid-is_ipaddrish_or_empty
+Description: Value must be an IP address or empty.
+Type: error
+
+Template: dump1090-mutability/invalid-is_number_or_empty
+Description: Value must be a decimal number or empty.
+Type: error
+
+Template: dump1090-mutability/invalid-is_valid_gain
+Description: Value must be a numeric gain value, or "max", or "agc".
+Type: error

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-hamradio/dump1090-mutability.git



More information about the pkg-hamradio-commits mailing list