client: Move get_password() from login.c to getpass.c

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
This commit is contained in:
Markus Armbruster 2020-12-27 10:06:08 +01:00
parent f7ae50261f
commit c1f1344afe
4 changed files with 86 additions and 43 deletions

View file

@ -28,7 +28,7 @@
# Makefile.in: Makefile template for configure
#
# Known contributors to this file:
# Markus Armbruster, 2005-2015
# Markus Armbruster, 2005-2020
#
CC = @CC@
@ -53,9 +53,9 @@ srcdir = @srcdir@
VPATH = @srcdir@
prog = empire$E
obj = expect.$O fnameat.$O host.$O ipglob.$O linebuf.$O login.$O \
main.$O play.$O ringbuf.$O secure.$O servcmd.$O termlib.$O version.$O \
$(LIBOBJS)
obj = expect.$O fnameat.$O getpass.$O host.$O ipglob.$O linebuf.$O \
login.$O main.$O play.$O ringbuf.$O secure.$O servcmd.$O termlib.$O \
version.$O $(LIBOBJS)
all: $(prog)
@ -82,6 +82,7 @@ uninstall:
# FIXME generate from .d
expect.$O: misc.h proto.h
fnameat.$O: fnameat.h
getpass.$O: misc.h
host.$O: misc.h
linebuf.$O: linebuf.h
login.$O: misc.h proto.h
@ -95,8 +96,8 @@ version.$O: version.h
$(obj): config.h
expect.$O: w32/sys/socket.h w32/unistd.h w32/w32types.h
getpass.$O: w32/unistd.h w32/w32types.h
host.$O: w32/sys/socket.h w32/netinet/in.h w32/arpa/inet.h w32/netdb.h w32/unistd.h w32/w32types.h
login.$O: w32/unistd.h w32/w32types.h
main.$O: w32/sys/socket.h w32/unistd.h w32/w32types.h
play.$O: w32/sys/socket.h w32/unistd.h w32/w32types.h
ringbuf.$O: w32/sys/uio.h w32/w32types.h

77
src/client/getpass.c Normal file
View file

@ -0,0 +1,77 @@
/*
* Empire - A multi-player, client/server Internet based war game.
* Copyright (C) 1986-2020, Dave Pare, Jeff Bailey, Thomas Ruschak,
* Ken Stevens, Steve McClure, Markus Armbruster
*
* Empire is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* ---
*
* See files README, COPYING and CREDITS in the root of the source
* tree for related information and legal notices. It is expected
* that future projects/authors will amend these files as needed.
*
* ---
*
* getpass.c: Get a password
*
* Known contributors to this file:
* Markus Armbruster, 2009-2020
*/
#include <config.h>
#ifdef HAVE_GETPASS
#include <unistd.h>
#else
#include <string.h>
#ifdef _WIN32
#include <windows.h>
#endif
#endif
#include "misc.h"
char *
get_password(const char *prompt)
{
#ifdef HAVE_GETPASS
return getpass(prompt);
#else
static char buf[128];
char *p;
size_t len;
#ifdef _WIN32
DWORD mode;
HANDLE input_handle = GetStdHandle(STD_INPUT_HANDLE);
if (GetConsoleMode(input_handle, &mode))
SetConsoleMode(input_handle, mode & ~ENABLE_ECHO_INPUT);
else
#endif
printf("Note: your input is echoed to the screen\n");
printf("%s", prompt);
fflush(stdout);
p = fgets(buf, sizeof(buf), stdin);
#ifdef _WIN32
if (GetConsoleMode(input_handle, &mode))
SetConsoleMode(input_handle, mode | ENABLE_ECHO_INPUT);
#endif
if (!p)
return NULL;
len = strlen(p);
if (p[len - 1] == '\n')
p[len - 1] = 0;
return p;
#endif /* !HAVE_GETPASS */
}

View file

@ -38,47 +38,9 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#ifdef _WIN32
#include <windows.h>
#endif
#include "misc.h"
#include "proto.h"
static char *
get_password(const char *prompt)
{
#ifdef HAVE_GETPASS
return getpass(prompt);
#else
static char buf[128];
char *p;
size_t len;
#ifdef _WIN32
DWORD mode;
HANDLE input_handle = GetStdHandle(STD_INPUT_HANDLE);
if (GetConsoleMode(input_handle, &mode))
SetConsoleMode(input_handle, mode & ~ENABLE_ECHO_INPUT);
else
#endif
printf("Note: your input is echoed to the screen\n");
printf("%s", prompt);
fflush(stdout);
p = fgets(buf, sizeof(buf), stdin);
#ifdef _WIN32
if (GetConsoleMode(input_handle, &mode))
SetConsoleMode(input_handle, mode | ENABLE_ECHO_INPUT);
#endif
if (!p)
return NULL;
len = strlen(p);
if (p[len - 1] == '\n')
p[len - 1] = 0;
return p;
#endif /* !HAVE_GETPASS */
}
int
login(int s, char *uname, char *cname, char *cpass,
int kill_proc, int utf8)

View file

@ -48,6 +48,9 @@ int parseid(char *);
int expect(int s, int match, char *buf);
void sendcmd(int s, char *cmd, char *arg);
/* getpass.c */
char *get_password(const char *);
/* host.c */
int tcp_connect(char *, char *);