openocd/src/server/startup.tcl
Antonio Borneo 5ba8e365d9 telnet: allow hiding selected commands during auto-completion
We have TCL procedure and commands that we do not want to show in
the list of auto-completion. E.g. TCL wrappers for deprecated
commands, internal procedures that are not supposed to be exposed
to user, or even commands that the user decides to hide.

Create a TCL procedure to be called by telnet auto-complete code
in place of the hard-coded TCL command. The procedure will run the
same command and will filter-out the unwanted command names.

Initialize the list of commands to be filtered-out with the name
of the TCL procedure above, as it is considered as internal.

Change-Id: I2d83bbf8194502368c589c85cccb617e69128c69
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-on: http://openocd.zylin.com/6194
Tested-by: jenkins
Reviewed-by: Tarek BOCHKATI <tarek.bouchkati@gmail.com>
2021-05-08 09:48:03 +01:00

39 lines
1.1 KiB
Tcl

# Defines basic Tcl procs for OpenOCD server modules
# 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} {
# Fix!!! we're resetting all targets here! Really we should reset only
# one target
reset halt
}
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]
}