From ad333fb2c7790dfcc4a5af286dfb15e8f7db0a27 Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Tue, 6 Aug 2019 19:22:51 +0200 Subject: Migrated the reading of login and password from cli to the common lib --- common/cli.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ common/cli.h | 9 +++++++++ 2 files changed, 67 insertions(+) create mode 100644 common/cli.c create mode 100644 common/cli.h (limited to 'common') diff --git a/common/cli.c b/common/cli.c new file mode 100644 index 0000000..fb4ac1f --- /dev/null +++ b/common/cli.c @@ -0,0 +1,58 @@ +#include +#include +#include + +#include "cli.h" + +char * login = NULL; +char * password = NULL; + +void common_cli_free(void) +{ + free(login); + login = NULL; + free(password); + password = NULL; +} + +const char* common_cli_get_login(void) +{ + while (1) { + size_t len = 0; + printf("Login: "); + ssize_t read = getline(&login, &len, stdin); + if (read > 1) { + login[read-1] = 0; + return login; + } + } +} + +const char* common_cli_get_password(void) +{ + struct termios oflags, nflags; + tcgetattr(fileno(stdin), &oflags); + nflags = oflags; + nflags.c_lflag &= ~ECHO; + nflags.c_lflag |= ECHONL; + + if (tcsetattr(fileno(stdin), TCSADRAIN, &nflags) != 0) { + perror("tcsetattr"); + exit(998); + } + + while (1) { + size_t len = 0; + printf("Password: "); + size_t read = getline(&password, &len, stdin); + if (read > 1) { + password[read-1] = 0; + break; + } + } + if (tcsetattr(fileno(stdin), TCSANOW, &oflags) != 0) { + perror("tcsetattr 2"); + exit(998); + } + return password; +} diff --git a/common/cli.h b/common/cli.h new file mode 100644 index 0000000..51f014b --- /dev/null +++ b/common/cli.h @@ -0,0 +1,9 @@ +#ifndef COMMON_CLI_H_ +#define COMMON_CLI_H_ + +void common_cli_free(void); +const char* common_cli_get_login(void); +const char* common_cli_get_password(void); + +#endif + -- cgit v1.2.3