telnet: allow hiding selected commands during auto-completion 94/6194/3
authorAntonio Borneo <borneo.antonio@gmail.com>
Mon, 26 Apr 2021 12:22:06 +0000 (14:22 +0200)
committerAntonio Borneo <borneo.antonio@gmail.com>
Sat, 8 May 2021 08:48:03 +0000 (09:48 +0100)
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>
src/server/startup.tcl
src/server/telnet_server.c

index dd1b31e417dd15942a3906dbf3b25a5734aa062e..04a1cc0469099f955c08c5fe1a57b338ee3242b7 100644 (file)
@@ -19,3 +19,20 @@ proc prevent_cps {} {
 
 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]
+}
index d5e0353c884b754e119bb0e71aecac40becde25a..acb57efd10b6bf06c083cdf6442182e914f19366 100644 (file)
@@ -470,7 +470,7 @@ static void telnet_auto_complete(struct connection *connection)
        query[usr_cmd_len] = '\0';
 
        /* filter commands */
-       char *query_cmd = alloc_printf("lsort [info commands {%s*}]", query);
+       char *query_cmd = alloc_printf("_telnet_autocomplete_helper {%s*}", query);
 
        if (!query_cmd) {
                LOG_ERROR("Out of memory");

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)