mirror of
https://gitea.psi.ch/ELOG/elog.git
synced 2026-10-01 05:05:19 +00:00
Implemented read_password
SVN revision: 982
This commit is contained in:
parent
84facc404b
commit
daad95827a
186
src/elogd.c
186
src/elogd.c
@ -6,6 +6,9 @@
|
|||||||
Contents: Web server program for Electronic Logbook ELOG
|
Contents: Web server program for Electronic Logbook ELOG
|
||||||
|
|
||||||
$Log$
|
$Log$
|
||||||
|
Revision 1.405 2004/07/27 20:37:08 midas
|
||||||
|
Implemented read_password
|
||||||
|
|
||||||
Revision 1.404 2004/07/23 23:27:26 midas
|
Revision 1.404 2004/07/23 23:27:26 midas
|
||||||
Finished entry deletion with confirmation
|
Finished entry deletion with confirmation
|
||||||
|
|
||||||
@ -353,6 +356,7 @@ static const char ELOGID[] = "elogd " VERSION " built " __DATE__ ", " __TIME__;
|
|||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <io.h>
|
#include <io.h>
|
||||||
|
#include <conio.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <direct.h>
|
#include <direct.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
@ -659,6 +663,7 @@ void show_bottom_text(LOGBOOK * lbs);
|
|||||||
int set_attributes(LOGBOOK * lbs, char attributes[][NAME_LENGTH], int n);
|
int set_attributes(LOGBOOK * lbs, char attributes[][NAME_LENGTH], int n);
|
||||||
void show_elog_list(LOGBOOK * lbs, INT past_n, INT last_n, INT page_n, char *info);
|
void show_elog_list(LOGBOOK * lbs, INT past_n, INT last_n, INT page_n, char *info);
|
||||||
int change_config_line(LOGBOOK * lbs, char *option, char *old_value, char *new_value);
|
int change_config_line(LOGBOOK * lbs, char *option, char *old_value, char *new_value);
|
||||||
|
int read_password(char *pwd, int size);
|
||||||
|
|
||||||
/*---- Funcions from the MIDAS library -----------------------------*/
|
/*---- Funcions from the MIDAS library -----------------------------*/
|
||||||
|
|
||||||
@ -11583,7 +11588,8 @@ void synchronize_logbook(LOGBOOK * lbs, int mode)
|
|||||||
|
|
||||||
eprintf("\nPlease enter password to access\n%s%s: ", list[index],
|
eprintf("\nPlease enter password to access\n%s%s: ", list[index],
|
||||||
lbs->name);
|
lbs->name);
|
||||||
fgets(str, sizeof(str), stdin);
|
read_password(str, sizeof(str));
|
||||||
|
eprintf("\n");
|
||||||
while (str[strlen(str) - 1] == '\r' || str[strlen(str) - 1] == '\n')
|
while (str[strlen(str) - 1] == '\r' || str[strlen(str) - 1] == '\n')
|
||||||
str[strlen(str) - 1] = 0;
|
str[strlen(str) - 1] = 0;
|
||||||
do_crypt(str, pwd);
|
do_crypt(str, pwd);
|
||||||
@ -19799,6 +19805,184 @@ void server_loop(int tcp_port)
|
|||||||
|
|
||||||
/*------------------------------------------------------------------*/
|
/*------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
int ss_getchar(BOOL reset)
|
||||||
|
/********************************************************************\
|
||||||
|
|
||||||
|
Routine: ss_getchar
|
||||||
|
|
||||||
|
Purpose: Read a single character
|
||||||
|
|
||||||
|
Input:
|
||||||
|
BOOL reset Reset terminal to standard mode
|
||||||
|
|
||||||
|
Output:
|
||||||
|
<none>
|
||||||
|
|
||||||
|
Function value:
|
||||||
|
int 0 for no character available
|
||||||
|
n ASCII code for normal character
|
||||||
|
|
||||||
|
\********************************************************************/
|
||||||
|
{
|
||||||
|
#ifdef OS_UNIX
|
||||||
|
|
||||||
|
static BOOL init = FALSE;
|
||||||
|
static struct termios save_termios;
|
||||||
|
struct termios buf;
|
||||||
|
int i, fd;
|
||||||
|
char c[3];
|
||||||
|
|
||||||
|
if (_daemon_flag)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
fd = fileno(stdin);
|
||||||
|
|
||||||
|
if (reset) {
|
||||||
|
if (init)
|
||||||
|
tcsetattr(fd, TCSAFLUSH, &save_termios);
|
||||||
|
init = FALSE;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!init) {
|
||||||
|
tcgetattr(fd, &save_termios);
|
||||||
|
memcpy(&buf, &save_termios, sizeof(buf));
|
||||||
|
|
||||||
|
buf.c_lflag &= ~(ECHO | ICANON | IEXTEN);
|
||||||
|
|
||||||
|
buf.c_iflag &= ~(ICRNL | INPCK | ISTRIP | IXON);
|
||||||
|
|
||||||
|
buf.c_cflag &= ~(CSIZE | PARENB);
|
||||||
|
buf.c_cflag |= CS8;
|
||||||
|
/* buf.c_oflag &= ~(OPOST); */
|
||||||
|
buf.c_cc[VMIN] = 0;
|
||||||
|
buf.c_cc[VTIME] = 0;
|
||||||
|
|
||||||
|
tcsetattr(fd, TCSAFLUSH, &buf);
|
||||||
|
init = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
memset(c, 0, 3);
|
||||||
|
i = read(fd, c, 1);
|
||||||
|
|
||||||
|
if (i == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* BS/DEL -> BS */
|
||||||
|
if (c[0] == 127)
|
||||||
|
return CH_BS;
|
||||||
|
|
||||||
|
return c[0];
|
||||||
|
|
||||||
|
#elif defined(OS_WINNT)
|
||||||
|
|
||||||
|
static BOOL init = FALSE;
|
||||||
|
static INT repeat_count = 0;
|
||||||
|
static INT repeat_char;
|
||||||
|
HANDLE hConsole;
|
||||||
|
DWORD nCharsRead;
|
||||||
|
INPUT_RECORD ir;
|
||||||
|
OSVERSIONINFO vi;
|
||||||
|
|
||||||
|
/* find out if we are under W95 */
|
||||||
|
vi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
|
||||||
|
GetVersionEx(&vi);
|
||||||
|
|
||||||
|
if (vi.dwPlatformId != VER_PLATFORM_WIN32_NT) {
|
||||||
|
/* under W95, console doesn't work properly */
|
||||||
|
int c;
|
||||||
|
|
||||||
|
if (!kbhit())
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
c = getch();
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
hConsole = GetStdHandle(STD_INPUT_HANDLE);
|
||||||
|
|
||||||
|
if (reset) {
|
||||||
|
SetConsoleMode(hConsole, ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT |
|
||||||
|
ENABLE_PROCESSED_INPUT | ENABLE_MOUSE_INPUT);
|
||||||
|
init = FALSE;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!init) {
|
||||||
|
SetConsoleMode(hConsole, ENABLE_PROCESSED_INPUT);
|
||||||
|
init = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (repeat_count) {
|
||||||
|
repeat_count--;
|
||||||
|
return repeat_char;
|
||||||
|
}
|
||||||
|
|
||||||
|
PeekConsoleInput(hConsole, &ir, 1, &nCharsRead);
|
||||||
|
|
||||||
|
if (nCharsRead == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
ReadConsoleInput(hConsole, &ir, 1, &nCharsRead);
|
||||||
|
|
||||||
|
if (ir.EventType != KEY_EVENT)
|
||||||
|
return ss_getchar(0);
|
||||||
|
|
||||||
|
if (!ir.Event.KeyEvent.bKeyDown)
|
||||||
|
return ss_getchar(0);
|
||||||
|
|
||||||
|
if (ir.Event.KeyEvent.wRepeatCount > 1) {
|
||||||
|
repeat_count = ir.Event.KeyEvent.wRepeatCount - 1;
|
||||||
|
repeat_char = ir.Event.KeyEvent.uChar.AsciiChar;
|
||||||
|
return repeat_char;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ir.Event.KeyEvent.uChar.AsciiChar)
|
||||||
|
return ir.Event.KeyEvent.uChar.AsciiChar;
|
||||||
|
|
||||||
|
if (ir.Event.KeyEvent.dwControlKeyState & (ENHANCED_KEY))
|
||||||
|
return ir.Event.KeyEvent.wVirtualKeyCode;
|
||||||
|
|
||||||
|
return ss_getchar(0);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
int read_password(char *pwd, int size)
|
||||||
|
{
|
||||||
|
int n;
|
||||||
|
char c, str[256];
|
||||||
|
|
||||||
|
n = 0;
|
||||||
|
do {
|
||||||
|
c = ss_getchar(0);
|
||||||
|
if (c == 13)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (c) {
|
||||||
|
|
||||||
|
if (c == 8) {
|
||||||
|
if (n > 0) {
|
||||||
|
str[--n] = 0;
|
||||||
|
eprintf("\b \b");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
str[n++] = c;
|
||||||
|
eprintf("*");
|
||||||
|
}
|
||||||
|
#ifdef OS_WINNT
|
||||||
|
Sleep(10);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
} while (1);
|
||||||
|
str[n] = 0;
|
||||||
|
|
||||||
|
strlcpy(pwd, str, size);
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------*/
|
||||||
|
|
||||||
void create_password(char *logbook, char *name, char *pwd)
|
void create_password(char *logbook, char *name, char *pwd)
|
||||||
{
|
{
|
||||||
int fh, length, i;
|
int fh, length, i;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user