mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-11-22 14:49:24 +01:00
client: Enable agent to control its prompt
This commit is contained in:
parent
3dc9f69c46
commit
0716334e61
@ -34,7 +34,6 @@
|
|||||||
#include "display.h"
|
#include "display.h"
|
||||||
|
|
||||||
#define IWD_PROMPT COLOR_GREEN "[iwd]" COLOR_OFF "# "
|
#define IWD_PROMPT COLOR_GREEN "[iwd]" COLOR_OFF "# "
|
||||||
#define IWD_AGENT_PROMPT COLOR_BLUE "Passphrase: " COLOR_OFF
|
|
||||||
#define LINE_LEN 81
|
#define LINE_LEN 81
|
||||||
|
|
||||||
static struct l_signal *resize_signal;
|
static struct l_signal *resize_signal;
|
||||||
@ -359,6 +358,7 @@ static void display_completion_matches(char **matches, int num_matches,
|
|||||||
#define MAX_PASSPHRASE_LEN 63
|
#define MAX_PASSPHRASE_LEN 63
|
||||||
|
|
||||||
static struct masked_input {
|
static struct masked_input {
|
||||||
|
bool use_mask;
|
||||||
char passphrase[MAX_PASSPHRASE_LEN];
|
char passphrase[MAX_PASSPHRASE_LEN];
|
||||||
char mask[MAX_PASSPHRASE_LEN];
|
char mask[MAX_PASSPHRASE_LEN];
|
||||||
} masked_input;
|
} masked_input;
|
||||||
@ -366,8 +366,14 @@ static struct masked_input {
|
|||||||
static void mask_input(void)
|
static void mask_input(void)
|
||||||
{
|
{
|
||||||
int point;
|
int point;
|
||||||
char *line = rl_copy_text(0, rl_end);
|
char *line;
|
||||||
size_t len = strlen(line);
|
size_t len;
|
||||||
|
|
||||||
|
if (!masked_input.use_mask)
|
||||||
|
return;
|
||||||
|
|
||||||
|
line = rl_copy_text(0, rl_end);
|
||||||
|
len = strlen(line);
|
||||||
|
|
||||||
if (!len)
|
if (!len)
|
||||||
goto done;
|
goto done;
|
||||||
@ -412,7 +418,8 @@ static void readline_callback(char *prompt)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (agent_prompt(masked_input.passphrase))
|
if (agent_prompt(masked_input.use_mask ?
|
||||||
|
masked_input.passphrase : prompt))
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
if (!strlen(prompt))
|
if (!strlen(prompt))
|
||||||
@ -477,14 +484,17 @@ void display_disable_cmd_prompt(void)
|
|||||||
rl_redisplay();
|
rl_redisplay();
|
||||||
}
|
}
|
||||||
|
|
||||||
void display_agent_prompt(const char *network_name)
|
void display_agent_prompt(const char *label, bool mask_input)
|
||||||
{
|
{
|
||||||
|
char *prompt;
|
||||||
|
|
||||||
if (agent_saved_input)
|
if (agent_saved_input)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
reset_masked_input();
|
masked_input.use_mask = mask_input;
|
||||||
|
|
||||||
display("Type the network passphrase for %s.\n", network_name);
|
if (mask_input)
|
||||||
|
reset_masked_input();
|
||||||
|
|
||||||
agent_saved_input = l_new(struct saved_input, 1);
|
agent_saved_input = l_new(struct saved_input, 1);
|
||||||
|
|
||||||
@ -495,26 +505,24 @@ void display_agent_prompt(const char *network_name)
|
|||||||
rl_redisplay();
|
rl_redisplay();
|
||||||
|
|
||||||
rl_erase_empty_line = 0;
|
rl_erase_empty_line = 0;
|
||||||
rl_set_prompt(IWD_AGENT_PROMPT);
|
|
||||||
|
prompt = l_strdup_printf(COLOR_BLUE "%s " COLOR_OFF, label);
|
||||||
|
rl_set_prompt(prompt);
|
||||||
|
l_free(prompt);
|
||||||
|
|
||||||
rl_forced_update_display();
|
rl_forced_update_display();
|
||||||
}
|
}
|
||||||
|
|
||||||
void display_agent_prompt_release(void)
|
void display_agent_prompt_release(const char *label)
|
||||||
{
|
{
|
||||||
if (!agent_saved_input)
|
if (!agent_saved_input)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (display_refresh.cmd) {
|
if (display_refresh.cmd) {
|
||||||
char *prompt;
|
|
||||||
char *text = rl_copy_text(0, rl_end);
|
char *text = rl_copy_text(0, rl_end);
|
||||||
|
char *prompt = l_strdup_printf(COLOR_BLUE "%s " COLOR_OFF
|
||||||
if (text) {
|
"%s\n", label, text);
|
||||||
prompt = l_strdup_printf(IWD_AGENT_PROMPT "%s\n",
|
l_free(text);
|
||||||
text);
|
|
||||||
l_free(text);
|
|
||||||
} else {
|
|
||||||
prompt = IWD_AGENT_PROMPT;
|
|
||||||
}
|
|
||||||
|
|
||||||
l_queue_push_tail(display_refresh.redo_entries, prompt);
|
l_queue_push_tail(display_refresh.redo_entries, prompt);
|
||||||
display_refresh.undo_lines++;
|
display_refresh.undo_lines++;
|
||||||
@ -531,7 +539,7 @@ void display_agent_prompt_release(void)
|
|||||||
|
|
||||||
rl_set_prompt(IWD_PROMPT);
|
rl_set_prompt(IWD_PROMPT);
|
||||||
|
|
||||||
rl_redisplay();
|
rl_forced_update_display();
|
||||||
}
|
}
|
||||||
|
|
||||||
void display_quit(void)
|
void display_quit(void)
|
||||||
|
@ -47,8 +47,8 @@ void display_refresh_set_cmd(const char *family, const char *entity,
|
|||||||
void display_enable_cmd_prompt(void);
|
void display_enable_cmd_prompt(void);
|
||||||
void display_disable_cmd_prompt(void);
|
void display_disable_cmd_prompt(void);
|
||||||
|
|
||||||
void display_agent_prompt(const char *network_name);
|
void display_agent_prompt(const char *label, bool mask_input);
|
||||||
void display_agent_prompt_release(void);
|
void display_agent_prompt_release(const char *label);
|
||||||
bool display_agent_is_active(void);
|
bool display_agent_is_active(void);
|
||||||
|
|
||||||
void display_quit(void);
|
void display_quit(void);
|
||||||
|
Loading…
Reference in New Issue
Block a user