client: Cancel agent prompt with CTRL+D

Previously, CTRL+D used to cause termination of the client. Now, the
command will cancel the agent’s prompts in agent mod. In regular mode
the behavior is unchanged.
This commit is contained in:
Tim Kourt 2019-10-28 10:21:59 -07:00 committed by Denis Kenzior
parent fea262c2aa
commit 37e6f6f08b
2 changed files with 23 additions and 13 deletions

View File

@ -366,14 +366,17 @@ static void process_input_username_password(const char *prompt)
struct l_dbus_message *reply; struct l_dbus_message *reply;
char *username; char *username;
if (!prompt || !strlen(prompt)) {
reply = agent_reply_canceled(pending_message,
"Canceled by user");
l_queue_clear(pending_op.saved_input, l_free);
goto send_reply;
}
if (l_queue_isempty(pending_op.saved_input)) { if (l_queue_isempty(pending_op.saved_input)) {
/* received username */ /* received username */
if (!strlen(prompt)) {
reply = agent_reply_canceled(pending_message,
"Canceled by user");
goto send_reply;
}
l_queue_push_tail(pending_op.saved_input, l_strdup(prompt)); l_queue_push_tail(pending_op.saved_input, l_strdup(prompt));
display_agent_prompt(PROMPT_PASSWORD, true); display_agent_prompt(PROMPT_PASSWORD, true);
@ -397,7 +400,7 @@ static void process_input_passphrase(const char *prompt)
{ {
struct l_dbus_message *reply; struct l_dbus_message *reply;
if (!strlen(prompt)) { if (!prompt || !strlen(prompt)) {
reply = agent_reply_canceled(pending_message, reply = agent_reply_canceled(pending_message,
"Canceled by user"); "Canceled by user");
goto send_reply; goto send_reply;
@ -412,11 +415,18 @@ send_reply:
static void process_input_password(const char *prompt) static void process_input_password(const char *prompt)
{ {
struct l_dbus_message *reply = struct l_dbus_message *reply;
l_dbus_message_new_method_return(pending_message);
if (!prompt || !strlen(prompt)) {
reply = agent_reply_canceled(pending_message,
"Canceled by user");
goto send_reply;
}
reply = l_dbus_message_new_method_return(pending_message);
l_dbus_message_set_arguments(reply, "s", prompt); l_dbus_message_set_arguments(reply, "s", prompt);
send_reply:
agent_send_reply(reply); agent_send_reply(reply);
} }

View File

@ -465,6 +465,10 @@ static void readline_callback(char *prompt)
HIST_ENTRY *previous_prompt; HIST_ENTRY *previous_prompt;
if (agent_prompt(masked_input.use_mask ?
masked_input.passphrase : prompt))
goto done;
if (!prompt) { if (!prompt) {
display_quit(); display_quit();
@ -473,10 +477,6 @@ static void readline_callback(char *prompt)
return; return;
} }
if (agent_prompt(masked_input.use_mask ?
masked_input.passphrase : prompt))
goto done;
if (!strlen(prompt)) if (!strlen(prompt))
goto done; goto done;