Summary
Add the missing Zephyr-compatible shell primitives needed for applications to
implement login/logout flows while keeping authentication policy outside
zshell.
This is a compatibility feature, not a request for zshell to own passwords,
hashing, credential storage, or authorization policy.
Upstream Zephyr behavior
Zephyr documents a login pattern composed from general shell features:
CONFIG_SHELL_START_OBSCURED and shell_obscure_set() obscure entered
characters.
CONFIG_SHELL_CMD_ROOT and shell_set_root_cmd() restrict command dispatch
to a selected root command.
CONFIG_SHELL_PROMPT_CHANGE and shell_prompt_change() switch between login
and normal prompts.
- The application supplies the login/logout commands and credential
verification.
References:
Proposed Boreas surface
Add Zephyr-compatible APIs:
int shell_obscure_set(const struct shell *sh, bool obscure);
int shell_prompt_change(const struct shell *sh, const char *prompt);
int shell_set_root_cmd(const char *cmd);
Add analogous Boreas Kconfig options using the existing ZSHELL namespace:
CONFIG_ZSHELL_START_OBSCURED
CONFIG_ZSHELL_PROMPT_CHANGE
CONFIG_ZSHELL_PROMPT_BUFF_SIZE
CONFIG_ZSHELL_CMD_ROOT
CONFIG_ZSHELL_CMDS_SELECT and the user-facing select command may be included
for broader parity, but they are not required for the core login/logout
composition if runtime root selection is otherwise supported.
Behavioral requirements
Obscured input
- When obscured, printable input is represented by
* rather than the original
character.
- Backspace and cursor behavior remain coherent.
shell_obscure_set() returns the previous state, matching Zephyr's API
contract.
- Startup state honors
CONFIG_ZSHELL_START_OBSCURED.
Root command selection
- A configured or runtime-selected root command becomes the effective root for
parsing.
- Input is passed as arguments beneath the selected command, matching Zephyr's
login sample.
- Other root commands cannot be executed while a root is selected.
- Help and tab completion must not expose commands outside the selected root.
- Passing
NULL to shell_set_root_cmd() restores the full root command tree.
- Invalid command names return
-EINVAL.
- The selection applies consistently to all shell instances, matching the
Zephyr API contract.
Prompt changes
shell_prompt_change() updates the prompt at runtime.
- Prompt storage is bounded by
CONFIG_ZSHELL_PROMPT_BUFF_SIZE.
- Invalid or oversized prompts return
-EINVAL.
- Existing static/default prompt behavior remains unchanged when runtime prompt
changes are disabled.
History
Provide a safe, documented way for an application login handler to purge the
credential-bearing history entry after authentication. The upstream sample
explicitly purges history before enabling the full command tree.
Tests
Add host tests covering:
- obscured character insertion and deletion;
- initial obscured state from Kconfig;
- valid and invalid runtime root selection;
- dispatch beneath a selected root;
- rejection of unrelated root commands;
- root-aware help/completion behavior;
- clearing the selected root;
- runtime prompt changes and bounds;
- history purge;
- unchanged behavior when the new options are disabled.
A small example modeled on Zephyr's login/logout sample would make the intended
composition and compatibility goal clear without embedding any authentication
policy in zshell.
Summary
Add the missing Zephyr-compatible shell primitives needed for applications to
implement login/logout flows while keeping authentication policy outside
zshell.This is a compatibility feature, not a request for
zshellto own passwords,hashing, credential storage, or authorization policy.
Upstream Zephyr behavior
Zephyr documents a login pattern composed from general shell features:
CONFIG_SHELL_START_OBSCUREDandshell_obscure_set()obscure enteredcharacters.
CONFIG_SHELL_CMD_ROOTandshell_set_root_cmd()restrict command dispatchto a selected root command.
CONFIG_SHELL_PROMPT_CHANGEandshell_prompt_change()switch between loginand normal prompts.
verification.
References:
Proposed Boreas surface
Add Zephyr-compatible APIs:
Add analogous Boreas Kconfig options using the existing
ZSHELLnamespace:CONFIG_ZSHELL_CMDS_SELECTand the user-facingselectcommand may be includedfor broader parity, but they are not required for the core login/logout
composition if runtime root selection is otherwise supported.
Behavioral requirements
Obscured input
*rather than the originalcharacter.
shell_obscure_set()returns the previous state, matching Zephyr's APIcontract.
CONFIG_ZSHELL_START_OBSCURED.Root command selection
parsing.
login sample.
NULLtoshell_set_root_cmd()restores the full root command tree.-EINVAL.Zephyr API contract.
Prompt changes
shell_prompt_change()updates the prompt at runtime.CONFIG_ZSHELL_PROMPT_BUFF_SIZE.-EINVAL.changes are disabled.
History
Provide a safe, documented way for an application login handler to purge the
credential-bearing history entry after authentication. The upstream sample
explicitly purges history before enabling the full command tree.
Tests
Add host tests covering:
A small example modeled on Zephyr's login/logout sample would make the intended
composition and compatibility goal clear without embedding any authentication
policy in
zshell.