From: Markus Armbruster Date: Sun, 27 Dec 2020 09:06:08 +0000 (+0100) Subject: client: Move get_password() from login.c to getpass.c X-Git-Url: http://git.pond.sub.org/?p=empserver;a=commitdiff_plain;h=e551b6198d36605120f1479baccbcaf1cb400313 client: Move get_password() from login.c to getpass.c Signed-off-by: Markus Armbruster --- diff --git a/src/client/Makefile.in b/src/client/Makefile.in index 6791618eb..3ab7b404a 100644 --- a/src/client/Makefile.in +++ b/src/client/Makefile.in @@ -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 diff --git a/src/client/getpass.c b/src/client/getpass.c new file mode 100644 index 000000000..517e37740 --- /dev/null +++ b/src/client/getpass.c @@ -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 . + * + * --- + * + * 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 + +#ifdef HAVE_GETPASS +#include +#else +#include +#ifdef _WIN32 +#include +#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 */ +} diff --git a/src/client/login.c b/src/client/login.c index 6707bc294..bf75bf845 100644 --- a/src/client/login.c +++ b/src/client/login.c @@ -38,47 +38,9 @@ #include #include #include -#include -#ifdef _WIN32 -#include -#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) diff --git a/src/client/misc.h b/src/client/misc.h index e33f1460d..0dca36b76 100644 --- a/src/client/misc.h +++ b/src/client/misc.h @@ -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 *);