X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=sbr%2Fgetpass.c;h=b33a3f8edaa840d7613c65c3d4bb0421f08d930b;hb=102679e27468bf6f8e1da24ccb9b0d93c489ec7e;hp=a8238fb2b0f36a930f67aea1c18014c2f9a2aed1;hpb=09470876aa753a96fa312296ed3c39ba761f3dd2;p=mmh diff --git a/sbr/getpass.c b/sbr/getpass.c index a8238fb..b33a3f8 100644 --- a/sbr/getpass.c +++ b/sbr/getpass.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1988, 1993 + * Portions of this code are Copyright (c) 1988, 1993 * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -34,27 +34,27 @@ */ #include -#include /* for calloc() */ #include #include /* for ttyname() */ #include "h/mh.h" /* for adios() */ -#define PASSWORD_LEN 128 +/* We don't use MAX_PASS here because the maximum password length on a remote + POP daemon will have nothing to do with the length on our OS. 256 is + arbitrary but hopefully big enough to accomodate everyone. */ +#define MAX_PASSWORD_LEN 256 #ifndef TCSANOW #define TCSANOW 0 #endif char * -getpass(const char *prompt) +nmh_getpass(const char *prompt) { struct termios oterm, term; int ch; - char *p, *ttystring, *buf; + char *p, *ttystring; FILE *fout, *fin; - - if(!(buf = (char *)calloc((size_t)(PASSWORD_LEN+1), sizeof(char)))) - adios(NULL, "unable to allocate string storage"); + static char buf[MAX_PASSWORD_LEN + 1]; /* Find if stdin is connect to a terminal. If so, read directly from * the terminal, and turn off echo. Otherwise read from stdin. @@ -75,9 +75,10 @@ getpass(const char *prompt) (void)tcsetattr(fileno(fin), TCSANOW, &term); } - for (p = buf; (ch = getc(fin)) != EOF && ch != '\n';) - if (p < buf + PASSWORD_LEN) - *p++ = ch; + for (p = buf; (ch = getc(fin)) != EOF && + ch != '\n' && + p < buf + MAX_PASSWORD_LEN;) + *p++ = ch; *p = '\0'; if(ttystring != NULL) { @@ -86,5 +87,5 @@ getpass(const char *prompt) (void)fputc('\n', fout); (void)fclose(fin); } - return((char *)buf); + return buf; }