Replace missing getpass()
getpass() is traditional Unix, but has been withdrawn from POSIX. As such, it may be missing. Check for that, and provide ersatz. It's not a real replacement, because it doesn't do the special magic getpass() is supposed to do: read from /dev/tty without echo. This bypasses our existing getpass() for Windows. In contrast to the portable getpass(), the Windows one tries to turn off echo, but that doesn't work for me (MinGW & Wine). Remove it.
This commit is contained in:
parent
b65395d6f4
commit
8c3b8d107d
5 changed files with 24 additions and 32 deletions
|
@ -92,7 +92,7 @@ AC_C_CHAR_UNSIGNED
|
||||||
|
|
||||||
### Checks for library functions
|
### Checks for library functions
|
||||||
|
|
||||||
AC_CHECK_FUNCS(getaddrinfo)
|
AC_CHECK_FUNCS(getaddrinfo getpass)
|
||||||
MY_FUNC_MAKECONTEXT
|
MY_FUNC_MAKECONTEXT
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -81,7 +81,7 @@ AC_MSG_RESULT([$Windows_res])
|
||||||
|
|
||||||
### Checks for library functions.
|
### Checks for library functions.
|
||||||
|
|
||||||
AC_CHECK_FUNCS(getaddrinfo)
|
AC_CHECK_FUNCS(getaddrinfo getpass)
|
||||||
|
|
||||||
|
|
||||||
### Site configuration
|
### Site configuration
|
||||||
|
|
|
@ -44,6 +44,28 @@
|
||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
#include "proto.h"
|
#include "proto.h"
|
||||||
|
|
||||||
|
#ifndef HAVE_GETPASS
|
||||||
|
#define getpass ersatz_getpass
|
||||||
|
static char *
|
||||||
|
ersatz_getpass(char *prompt)
|
||||||
|
{
|
||||||
|
static char buf[128];
|
||||||
|
char *p;
|
||||||
|
size_t len;
|
||||||
|
|
||||||
|
printf("Note: your input is echoed to the screen\n");
|
||||||
|
printf("Your name? ");
|
||||||
|
fflush(stdout);
|
||||||
|
p = fgets(buf, sizeof(buf), stdin);
|
||||||
|
if (!p)
|
||||||
|
return NULL;
|
||||||
|
len = strlen(p);
|
||||||
|
if (p[len - 1] == '\n')
|
||||||
|
p[len - 1] = 0;
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
int
|
int
|
||||||
login(int s, char *uname, char *cname, char *cpass,
|
login(int s, char *uname, char *cname, char *cpass,
|
||||||
int kill_proc, int utf8)
|
int kill_proc, int utf8)
|
||||||
|
|
|
@ -204,35 +204,6 @@ w32_close_socket(int fd)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* WIN32 equivalent for getpass
|
|
||||||
*/
|
|
||||||
char *
|
|
||||||
getpass(char *prompt)
|
|
||||||
{
|
|
||||||
static char tmp[128];
|
|
||||||
int len;
|
|
||||||
char *cpass;
|
|
||||||
DWORD mode;
|
|
||||||
HANDLE input_handle = GetStdHandle(STD_INPUT_HANDLE);
|
|
||||||
|
|
||||||
if (GetConsoleMode(input_handle, &mode))
|
|
||||||
SetConsoleMode(input_handle, mode & ~ENABLE_ECHO_INPUT);
|
|
||||||
else
|
|
||||||
printf("Note: This is echoed to the screen\n");
|
|
||||||
printf("%s", prompt);
|
|
||||||
fflush(stdout);
|
|
||||||
cpass = fgets(tmp, sizeof(tmp), stdin);
|
|
||||||
if (GetConsoleMode(input_handle, &mode))
|
|
||||||
SetConsoleMode(input_handle, mode | ENABLE_ECHO_INPUT);
|
|
||||||
if (cpass == NULL)
|
|
||||||
return NULL;
|
|
||||||
len = strlen(cpass);
|
|
||||||
if (tmp[len - 1] == '\n')
|
|
||||||
tmp[len - 1] = 0;
|
|
||||||
return cpass;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* POSIX compatible open() replacement
|
* POSIX compatible open() replacement
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -75,7 +75,6 @@ extern int w32_openfd(const char *fname, int oflag, ...);
|
||||||
extern int w32_openhandle(const char *fname, int oflag);
|
extern int w32_openhandle(const char *fname, int oflag);
|
||||||
|
|
||||||
extern struct passwd *w32_getpw(void);
|
extern struct passwd *w32_getpw(void);
|
||||||
extern char *getpass(char *prompt);
|
|
||||||
extern void sysdep_init(void);
|
extern void sysdep_init(void);
|
||||||
|
|
||||||
#define recv(sock, buffer, buf_size, flags) \
|
#define recv(sock, buffer, buf_size, flags) \
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue