2015-04-22 21:55:33 +00:00
|
|
|
#if HAVE_CONFIG_H
|
2010-03-04 08:14:36 +00:00
|
|
|
#include "config.h"
|
2015-04-22 21:55:33 +00:00
|
|
|
#endif
|
2010-03-04 08:14:36 +00:00
|
|
|
|
|
|
|
#ifndef HAVE_GETPASS /* empty file if getpass is available */
|
2002-06-20 12:08:05 +00:00
|
|
|
#include <stdio.h>
|
2010-03-04 08:14:36 +00:00
|
|
|
|
2008-03-06 16:06:59 +00:00
|
|
|
#include "compat_getpass.h"
|
2010-03-04 08:14:36 +00:00
|
|
|
|
2008-03-06 16:06:59 +00:00
|
|
|
#ifdef _WIN32
|
2013-05-27 14:44:32 +00:00
|
|
|
#include <conio.h>
|
2013-08-13 13:17:01 +00:00
|
|
|
#else
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <termios.h>
|
|
|
|
#include <unistd.h>
|
|
|
|
|
|
|
|
int _getch(void)
|
|
|
|
{
|
|
|
|
struct termios old, mute;
|
|
|
|
int c;
|
|
|
|
|
|
|
|
tcgetattr(STDIN_FILENO, &old);
|
|
|
|
mute = old;
|
|
|
|
mute.c_lflag &= ~(ICANON|ECHO);
|
|
|
|
|
|
|
|
if (0 != tcsetattr(STDIN_FILENO, TCSANOW, &mute)) {
|
|
|
|
/* XXX an error happened */
|
|
|
|
/* We prefer to print the password, i.e. ignore the error,
|
|
|
|
* rather than to deny the service, i.e. return something like '\0' */
|
|
|
|
}
|
|
|
|
|
|
|
|
c = getchar();
|
|
|
|
|
|
|
|
tcsetattr(STDIN_FILENO, TCSANOW, &old);
|
|
|
|
|
|
|
|
return c;
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2002-06-20 12:08:05 +00:00
|
|
|
char *getpass(const char *prompt)
|
|
|
|
{
|
|
|
|
static char buf[128];
|
|
|
|
size_t i;
|
|
|
|
|
|
|
|
fputs(prompt, stderr);
|
|
|
|
fflush(stderr);
|
2004-07-12 15:19:28 +00:00
|
|
|
for (i = 0; i < sizeof(buf) - 1; i++) {
|
2002-06-20 12:08:05 +00:00
|
|
|
buf[i] = _getch();
|
|
|
|
if (buf[i] == '\r')
|
2005-01-19 08:00:41 +00:00
|
|
|
break;
|
2002-06-20 12:08:05 +00:00
|
|
|
}
|
|
|
|
buf[i] = 0;
|
|
|
|
fputs("\n", stderr);
|
2005-01-19 08:00:41 +00:00
|
|
|
return buf;
|
2002-06-20 12:08:05 +00:00
|
|
|
}
|
2010-03-04 08:14:36 +00:00
|
|
|
#endif /* HAVE_GETPASS */
|