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.
### Checks for library functions
### Checks for library functions
-AC_CHECK_FUNCS(getaddrinfo)
+AC_CHECK_FUNCS(getaddrinfo getpass)
### Checks for library functions.
### Checks for library functions.
-AC_CHECK_FUNCS(getaddrinfo)
+AC_CHECK_FUNCS(getaddrinfo getpass)
#include "misc.h"
#include "proto.h"
#include "misc.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
login(int s, char *uname, char *cname, char *cpass,
int kill_proc, int utf8)
int
login(int s, char *uname, char *cname, char *cpass,
int kill_proc, int utf8)
-/*
- * 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
*/
extern int w32_openhandle(const char *fname, int oflag);
extern struct passwd *w32_getpw(void);
extern int w32_openhandle(const char *fname, int oflag);
extern struct passwd *w32_getpw(void);
-extern char *getpass(char *prompt);
extern void sysdep_init(void);
#define recv(sock, buffer, buf_size, flags) \
extern void sysdep_init(void);
#define recv(sock, buffer, buf_size, flags) \