tcl: ngultra: add target config file
[fw/openocd] / src / server / startup.tcl
index 7801d1b0c1224fe299f8626706284c4ab90aecc9..1d30b1dd37782a77a210540abf34535929fa4215 100644 (file)
@@ -1,6 +1,8 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+
 # Defines basic Tcl procs for OpenOCD server modules
 
-# Handle GDB 'R' packet. Can be overriden by configuration script,
+# Handle GDB 'R' packet. Can be overridden by configuration script,
 # but it's not something one would expect target scripts to do
 # normally
 proc ocd_gdb_restart {target_id} {
@@ -8,3 +10,34 @@ proc ocd_gdb_restart {target_id} {
        # one target
        reset halt
 }
+
+lappend _telnet_autocomplete_skip prevent_cps
+lappend _telnet_autocomplete_skip POST
+lappend _telnet_autocomplete_skip Host:
+proc prevent_cps {} {
+       echo "Possible SECURITY ATTACK detected."
+       echo "It looks like somebody is sending POST or Host: commands to OpenOCD."
+       echo "This is likely due to an attacker attempting to use Cross Protocol Scripting"
+       echo "to compromise your OpenOCD instance. Connection aborted."
+       exit
+}
+
+proc POST {args} { prevent_cps }
+proc Host: {args} { prevent_cps }
+
+# list of commands we don't want to appear in autocomplete
+lappend _telnet_autocomplete_skip _telnet_autocomplete_helper
+
+# helper for telnet autocomplete
+proc _telnet_autocomplete_helper pattern {
+       set cmds [info commands $pattern]
+
+       # skip matches in variable '_telnet_autocomplete_skip'
+       foreach skip $::_telnet_autocomplete_skip {
+               foreach n [lsearch -all -regexp $cmds "^$skip\$"] {
+                       set cmds [lreplace $cmds $n $n]
+               }
+       }
+
+       return [lsort $cmds]
+}