aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Brown <mcb30@ipxe.org>2024-06-20 16:21:28 -0700
committerMichael Brown <mcb30@ipxe.org>2024-06-20 16:24:38 -0700
commit1c3c5e2b22ca31bbf77c39aef51671d0b6e95767 (patch)
tree822160fed4bc9e189bbbc70087c3e43e1b3098c6
parent039019039e89aedf4c5a0d81c351638a1e036335 (diff)
downloadipxe-1c3c5e2b22ca31bbf77c39aef51671d0b6e95767.zip
ipxe-1c3c5e2b22ca31bbf77c39aef51671d0b6e95767.tar.gz
ipxe-1c3c5e2b22ca31bbf77c39aef51671d0b6e95767.tar.bz2
[dynui] Add concept of a secret user interface item
For interactive forms, the concept of a secret value becomes meaningful (e.g. for password fields). Add a flag to indicate that an item represents a secret value, and allow this flag to be set via the "--secret" option of the "item" command. This flag has no meaning for menu items, but is silently accepted anyway to keep the code size minimal. Signed-off-by: Michael Brown <mcb30@ipxe.org>
-rw-r--r--src/hci/commands/dynui_cmd.c6
-rw-r--r--src/include/ipxe/dynui.h3
2 files changed, 9 insertions, 0 deletions
diff --git a/src/hci/commands/dynui_cmd.c b/src/hci/commands/dynui_cmd.c
index 557c5db..5aed3d0 100644
--- a/src/hci/commands/dynui_cmd.c
+++ b/src/hci/commands/dynui_cmd.c
@@ -116,6 +116,8 @@ struct item_options {
unsigned int key;
/** Use as default */
int is_default;
+ /** Value is a secret */
+ int is_secret;
/** Use as a separator */
int is_gap;
};
@@ -128,6 +130,8 @@ static struct option_descriptor item_opts[] = {
struct item_options, key, parse_key ),
OPTION_DESC ( "default", 'd', no_argument,
struct item_options, is_default, parse_flag ),
+ OPTION_DESC ( "secret", 's', no_argument,
+ struct item_options, is_secret, parse_flag ),
OPTION_DESC ( "gap", 'g', no_argument,
struct item_options, is_gap, parse_flag ),
};
@@ -177,6 +181,8 @@ static int item_exec ( int argc, char **argv ) {
/* Add dynamic user interface item */
if ( opts.is_default )
flags |= DYNUI_DEFAULT;
+ if ( opts.is_secret )
+ flags |= DYNUI_SECRET;
item = add_dynui_item ( dynui, name, ( text ? text : "" ), flags,
opts.key );
if ( ! item ) {
diff --git a/src/include/ipxe/dynui.h b/src/include/ipxe/dynui.h
index 5ba0070..5029e58 100644
--- a/src/include/ipxe/dynui.h
+++ b/src/include/ipxe/dynui.h
@@ -44,6 +44,9 @@ struct dynamic_item {
/** Dynamic user interface item is default selection */
#define DYNUI_DEFAULT 0x0001
+/** Dynamic user interface item represents a secret */
+#define DYNUI_SECRET 0x0002
+
extern struct dynamic_ui * create_dynui ( const char *name, const char *title );
extern struct dynamic_item * add_dynui_item ( struct dynamic_ui *dynui,
const char *name,