# HG changeset patch # User Timo Sirainen # Date 1291075974 0 # Node ID 6ea1671108f13b066123c34961e71821a91b0104 # Parent 77d582b2dc51bfd14486d4dca18795c9b029ed3d t_askpass(): Removed a limit of 1024 bytes for the password. diff -r 77d582b2dc51 -r 6ea1671108f1 src/lib/askpass.c --- a/src/lib/askpass.c Mon Nov 29 23:58:19 2010 +0000 +++ b/src/lib/askpass.c Tue Nov 30 00:12:54 2010 +0000 @@ -1,6 +1,8 @@ /* Copyright (c) 2006-2010 Dovecot authors, see the included COPYING file */ #include "lib.h" +#include "buffer.h" +#include "str.h" #include "askpass.h" #include @@ -8,7 +10,7 @@ #include #include -void askpass(const char *prompt, char *buf, size_t buf_size) +static void askpass_str(const char *prompt, buffer_t *pass) { struct termios old_tio, tio; bool restore_tio = FALSE; @@ -37,13 +39,10 @@ /* read the password */ pos = 0; while (read(fd, &ch, 1) > 0) { - if (pos >= buf_size-1) - break; if (ch == '\n' || ch == '\r') break; - buf[pos++] = ch; + buffer_append_c(pass, ch); } - buf[pos] = '\0'; if (restore_tio) (void)tcsetattr(fd, TCSAFLUSH, &old_tio); @@ -52,10 +51,19 @@ (void)close(fd); } +void askpass(const char *prompt, char *buf, size_t buf_size) +{ + buffer_t str; + + buffer_create_data(&str, buf, buf_size); + askpass_str(prompt, &str); + buffer_append_c(&str, '\0'); +} + const char *t_askpass(const char *prompt) { - char buf[1024]; + string_t *str = t_str_new(32); - askpass(prompt, buf, sizeof(buf)); - return t_strdup(buf); + askpass_str(prompt, str); + return str_c(str); }