Handle Ctrl+C and Ctrl+Z in gpass_cli

This commit is contained in:
Grégory Soutadé 2017-07-08 08:37:16 +02:00
parent 35f49d24b3
commit 0caa8a66e1

View File

@ -21,6 +21,7 @@
#include <unistd.h> #include <unistd.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <signal.h>
#include <curl/curl.h> #include <curl/curl.h>
#include <openssl/opensslv.h> #include <openssl/opensslv.h>
@ -71,12 +72,18 @@ static EVP_MD_CTX ss_md_ctx;
static const EVP_MD * s_md_256; static const EVP_MD * s_md_256;
static EVP_CIPHER_CTX * s_cipher_ctx; static EVP_CIPHER_CTX * s_cipher_ctx;
static int s_stop_display = 0;
static void signal_handler(int signum)
{
s_stop_display = 1;
}
static void display_password(char* password, int time) static void display_password(char* password, int time)
{ {
int length; int length;
for (; time; time--) for (; time && !s_stop_display; time--)
{ {
printf("\r(%02d) Password found: %s", time, password); printf("\r(%02d) Password found: %s", time, password);
fflush(stdout); fflush(stdout);
@ -85,7 +92,7 @@ static void display_password(char* password, int time)
// Clear line // Clear line
printf("\r"); printf("\r");
length = 4 + 17 + strlen(password) + 1; length = 4 + 17 + strlen(password) + 1 + 1 /* For Ctrl+Z/C */;
while (length--) while (length--)
printf(" "); printf(" ");
printf("\n"); printf("\n");
@ -695,6 +702,11 @@ int main(int argc, char** argv)
params.orig_master_key = strdup(tmp); params.orig_master_key = strdup(tmp);
derive_master_key(&params); derive_master_key(&params);
// Ctrl+C
signal(SIGINT, signal_handler);
// Ctrl+Z
signal(SIGTSTP, signal_handler);
ret = ask_server(&params); ret = ask_server(&params);
// try again with new parameters // try again with new parameters