From 8ddb1140a188f921b02bd5266aa3ab659734a7e6 Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Tue, 19 Nov 2013 00:54:52 +0100 Subject: m + redisable echo when the tty has been reopened MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- src/cerberus.c | 3 +++ src/passphrase.c | 20 ++++++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/cerberus.c b/src/cerberus.c index 3a5dd5d..ce60846 100644 --- a/src/cerberus.c +++ b/src/cerberus.c @@ -129,6 +129,9 @@ int main(int argc, char** argv) #endif secure_tty(tty_group); + /* Redisable echoing */ + disable_echo(); + /* Set up clean quiting and time out */ signal(SIGALRM, timeout_quit); diff --git a/src/passphrase.c b/src/passphrase.c index 9482ba1..50c957f 100644 --- a/src/passphrase.c +++ b/src/passphrase.c @@ -46,11 +46,18 @@ char* get_passphrase(void) we will not do that under normal usecases, if we do, it okay to segfault on null derefencing and quit on that. */ - char* rc = malloc(START_PASSPHRASE_LIMIT); + char* rc = malloc(START_PASSPHRASE_LIMIT * sizeof(char)); long size = START_PASSPHRASE_LIMIT; long len = 0; int c; + if (rc == NULL) + { + perror("malloc"); + sleep(ERROR_SLEEP); + _exit(1); + } + /* Read password until EOF or Enter, skip all ^0 as that is probably not a part of the passphrase (good luck typing that in X.org) and can be echoed into stdin by the kernel. */ @@ -63,7 +70,12 @@ char* get_passphrase(void) { *(rc + len++) = c; if (len == size) - rc = realloc(rc, size <<= 1L); + if ((rc = realloc(rc, (size <<= 1L) * sizeof(char))) == NULL) + { + perror("realloc"); + sleep(ERROR_SLEEP); + _exit(1); + } } } @@ -81,8 +93,8 @@ void disable_echo(void) { struct termios stty; - tcgetattr(STDIN_FILENO, &saved_stty); - stty = saved_stty; + tcgetattr(STDIN_FILENO, &stty); + saved_stty = stty; stty.c_lflag &= ~ECHO; tcsetattr(STDIN_FILENO, TCSAFLUSH, &stty); } -- cgit v1.2.3-70-g09d2