You've already forked mariadb-connector-c
mirror of
https://github.com/mariadb-corporation/mariadb-connector-c.git
synced 2025-08-08 14:02:17 +03:00
removed obsolete getpass() stuff from get_password.c
This commit is contained in:
@@ -179,11 +179,11 @@ CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/include/my_config.h.in
|
|||||||
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/include)
|
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/include)
|
||||||
|
|
||||||
ADD_SUBDIRECTORY(include)
|
ADD_SUBDIRECTORY(include)
|
||||||
ADD_SUBDIRECTORY(plugins)
|
|
||||||
ADD_SUBDIRECTORY(libmariadb)
|
ADD_SUBDIRECTORY(libmariadb)
|
||||||
IF(NOT WIN32)
|
IF(NOT WIN32)
|
||||||
ADD_SUBDIRECTORY(mariadb_config)
|
ADD_SUBDIRECTORY(mariadb_config)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
ADD_SUBDIRECTORY(plugins)
|
||||||
|
|
||||||
IF(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/unittest)
|
IF(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/unittest)
|
||||||
ADD_SUBDIRECTORY(unittest/mytap)
|
ADD_SUBDIRECTORY(unittest/mytap)
|
||||||
|
@@ -35,7 +35,6 @@ my_vsnprintf.c
|
|||||||
errors.c
|
errors.c
|
||||||
getopt1.c
|
getopt1.c
|
||||||
getopt.c
|
getopt.c
|
||||||
get_password.c
|
|
||||||
int2str.c
|
int2str.c
|
||||||
is_prefix.c
|
is_prefix.c
|
||||||
libmariadb.c
|
libmariadb.c
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
|
/************************************************************************************
|
||||||
|
Copyright (C) 2014 MariaDB Corporation AB
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
This library is free software; you can redistribute it and/or
|
||||||
modify it under the terms of the GNU Library General Public
|
modify it under the terms of the GNU Library General Public
|
||||||
@@ -11,64 +12,94 @@
|
|||||||
Library General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
You should have received a copy of the GNU Library General Public
|
||||||
License along with this library; if not, write to the Free
|
License along with this library; if not see <http://www.gnu.org/licenses>
|
||||||
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
|
or write to the Free Software Foundation, Inc.,
|
||||||
MA 02111-1307, USA */
|
51 Franklin St., Fifth Floor, Boston, MA 02110, USA
|
||||||
|
*************************************************************************************/
|
||||||
/*
|
|
||||||
** Ask for a password from tty
|
|
||||||
** This is an own file to avoid conflicts with curses
|
|
||||||
*/
|
|
||||||
#include <my_global.h>
|
#include <my_global.h>
|
||||||
#include <my_sys.h>
|
#include <my_sys.h>
|
||||||
#include "mysql.h"
|
#include "mysql.h"
|
||||||
#include <m_string.h>
|
#include <m_string.h>
|
||||||
#include <m_ctype.h>
|
#include <m_ctype.h>
|
||||||
#include <dbug.h>
|
#include <stdio.h>
|
||||||
|
#include <memory.h>
|
||||||
|
|
||||||
#if defined(HAVE_BROKEN_GETPASS) && !defined(HAVE_GETPASSPHRASE)
|
#ifndef _WIN32
|
||||||
#undef HAVE_GETPASS
|
#include <termios.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_GETPASS
|
|
||||||
#ifdef HAVE_PWD_H
|
|
||||||
#include <pwd.h>
|
|
||||||
#endif /* HAVE_PWD_H */
|
|
||||||
#else /* ! HAVE_GETPASS */
|
|
||||||
#if !defined( _WIN32) && !defined(OS2)
|
|
||||||
#include <sys/ioctl.h>
|
|
||||||
#ifdef HAVE_TERMIOS_H /* For tty-password */
|
|
||||||
#include <termios.h>
|
|
||||||
#define TERMIO struct termios
|
|
||||||
#else
|
|
||||||
#ifdef HAVE_TERMIO_H /* For tty-password */
|
|
||||||
#include <termio.h>
|
|
||||||
#define TERMIO struct termio
|
|
||||||
#else
|
|
||||||
#include <sgtty.h>
|
|
||||||
#define TERMIO struct sgttyb
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#ifdef alpha_linux_port
|
|
||||||
#include <asm/ioctls.h> /* QQ; Fix this in configure */
|
|
||||||
#include <asm/termiobits.h>
|
|
||||||
#endif
|
|
||||||
#else
|
#else
|
||||||
#include <conio.h>
|
#include <conio.h>
|
||||||
#endif /* _WIN32 */
|
#endif /* _WIN32 */
|
||||||
#endif /* HAVE_GETPASS */
|
|
||||||
|
|
||||||
#ifdef HAVE_GETPASSPHRASE /* For Solaris */
|
/* {{{ static char *get_password() */
|
||||||
#define getpass(A) getpassphrase(A)
|
/*
|
||||||
|
read password from device
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
get_password
|
||||||
|
Hdl/file file handle
|
||||||
|
buffer input buffer
|
||||||
|
length buffer length
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
buffer zero terminated input buffer
|
||||||
|
*/
|
||||||
|
#ifdef _WIN32
|
||||||
|
static char *get_password(HANDLE Hdl, char *buffer, DWORD length)
|
||||||
|
#else
|
||||||
|
static char *get_password(FILE *file, char *buffer, int length)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
char inChar;
|
||||||
|
int CharsProcessed= 1;
|
||||||
|
int Offset= 0;
|
||||||
|
|
||||||
|
memset(buffer, 0, length);
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
#ifdef _WIN32
|
||||||
|
if (!ReadConsole(Hdl, &inChar, 1, &CharsProcessed, NULL) ||
|
||||||
|
!CharsProcessed)
|
||||||
|
break;
|
||||||
|
#else
|
||||||
|
inChar= fgetc(file);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined( _WIN32) || defined(OS2)
|
switch(inChar) {
|
||||||
/* {{{ statuc char* get_password */
|
case '\b': /* backslash */
|
||||||
|
if (Offset)
|
||||||
|
{
|
||||||
|
/* cursor is always at the end */
|
||||||
|
Offset--;
|
||||||
|
buffer[Offset]= 0;
|
||||||
|
#ifdef _WIN32
|
||||||
|
_cputs("\b \b");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case '\n':
|
||||||
|
case '\r':
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
buffer[Offset]= inChar;
|
||||||
|
if (Offset < length - 2)
|
||||||
|
Offset++;
|
||||||
|
#ifdef _WIN32
|
||||||
|
_cputs("*");
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} while (CharsProcessed && inChar != '\n' && inChar != '\r');
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
/* }}} */
|
||||||
|
|
||||||
|
/* {{{ static char* get_tty_password */
|
||||||
/*
|
/*
|
||||||
reads password from tty/console
|
reads password from tty/console
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
get_password()
|
get_tty_password()
|
||||||
buffer input buffer
|
buffer input buffer
|
||||||
length length of input buffer
|
length length of input buffer
|
||||||
|
|
||||||
@@ -88,7 +119,8 @@ char* get_tty_password(char *prompt, char *buffer, int length)
|
|||||||
DWORD CharsProcessed= 0;
|
DWORD CharsProcessed= 0;
|
||||||
char inChar;
|
char inChar;
|
||||||
|
|
||||||
ZeroMemory(buffer, length);
|
if (prompt)
|
||||||
|
fprintf(stderr, "%s", prompt);
|
||||||
|
|
||||||
if (!(Hdl= CreateFile("CONIN$",
|
if (!(Hdl= CreateFile("CONIN$",
|
||||||
GENERIC_READ | GENERIC_WRITE,
|
GENERIC_READ | GENERIC_WRITE,
|
||||||
@@ -104,147 +136,37 @@ char* get_tty_password(char *prompt, char *buffer, int length)
|
|||||||
GetConsoleMode(Hdl, &SaveState);
|
GetConsoleMode(Hdl, &SaveState);
|
||||||
SetConsoleMode(Hdl, ENABLE_PROCESSED_INPUT);
|
SetConsoleMode(Hdl, ENABLE_PROCESSED_INPUT);
|
||||||
|
|
||||||
do
|
buffer= get_password(Hdl, buffer, length);
|
||||||
{
|
|
||||||
if (!ReadConsole(Hdl, &inChar, 1, &CharsProcessed, NULL) ||
|
|
||||||
!CharsProcessed)
|
|
||||||
break;
|
|
||||||
|
|
||||||
switch(inChar) {
|
|
||||||
case '\b': /* backslash */
|
|
||||||
if (Offset)
|
|
||||||
{
|
|
||||||
/* cursor is always at the end */
|
|
||||||
Offset--;
|
|
||||||
buffer[Offset]= 0;
|
|
||||||
_cputs("\b \b");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case '\n':
|
|
||||||
case '\r':
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
buffer[Offset]= inChar;
|
|
||||||
if (Offset < length - 2)
|
|
||||||
Offset++;
|
|
||||||
_cputs("*");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} while (CharsProcessed && inChar != '\n' && inChar != '\r');
|
|
||||||
SetConsoleMode(Hdl, SaveState);
|
SetConsoleMode(Hdl, SaveState);
|
||||||
CloseHandle(Hdl);
|
CloseHandle(Hdl);
|
||||||
return buffer;
|
return buffer;
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
struct termios term_old,
|
||||||
|
term_new;
|
||||||
|
FILE *readfrom;
|
||||||
|
|
||||||
|
if (prompt && isatty(fileno(stderr)))
|
||||||
|
fputs(prompt, stderr);
|
||||||
|
|
||||||
|
if (!(readfrom= fopen("/dev/tty", "r")))
|
||||||
|
readfrom= stdin;
|
||||||
|
|
||||||
|
/* try to disable echo */
|
||||||
|
tcgetattr(fileno(readfrom), &term_old);
|
||||||
|
term_new= term_old;
|
||||||
|
term_new.c_cc[VMIN] = 1;
|
||||||
|
term_new.c_cc[VTIME]= 0;
|
||||||
|
term_new.c_lflag&= ~(ECHO | ISIG | ICANON | ECHONL);
|
||||||
|
tcsetattr(fileno(readfrom), TCSADRAIN, &term_new);
|
||||||
|
|
||||||
|
buffer= get_password(readfrom, buffer, length);
|
||||||
|
|
||||||
|
if (isatty(fileno(readfrom)))
|
||||||
|
tcsetattr(fileno(readfrom), TCSADRAIN, &term_old);
|
||||||
|
|
||||||
|
fclose(readfrom);
|
||||||
|
|
||||||
|
return buffer;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
#else
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef HAVE_GETPASS
|
|
||||||
/*
|
|
||||||
** Can't use fgets, because readline will get confused
|
|
||||||
** length is max number of chars in to, not counting \0
|
|
||||||
* to will not include the eol characters.
|
|
||||||
*/
|
|
||||||
|
|
||||||
static void get_password(char *to,uint length,int fd,bool echo)
|
|
||||||
{
|
|
||||||
char *pos=to,*end=to+length;
|
|
||||||
|
|
||||||
for (;;)
|
|
||||||
{
|
|
||||||
char tmp;
|
|
||||||
if (my_read(fd,&tmp,1,MYF(0)) != 1)
|
|
||||||
break;
|
|
||||||
if (tmp == '\b' || (int) tmp == 127)
|
|
||||||
{
|
|
||||||
if (pos != to)
|
|
||||||
{
|
|
||||||
if (echo)
|
|
||||||
{
|
|
||||||
fputs("\b \b",stdout);
|
|
||||||
fflush(stdout);
|
|
||||||
}
|
|
||||||
pos--;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (tmp == '\n' || tmp == '\r' || tmp == 3)
|
|
||||||
break;
|
|
||||||
if (iscntrl(tmp) || pos == end)
|
|
||||||
continue;
|
|
||||||
if (echo)
|
|
||||||
{
|
|
||||||
fputc('*',stdout);
|
|
||||||
fflush(stdout);
|
|
||||||
}
|
|
||||||
*(pos++) = tmp;
|
|
||||||
}
|
|
||||||
while (pos != to && isspace(pos[-1]) == ' ')
|
|
||||||
pos--; /* Allow dummy space at end */
|
|
||||||
*pos=0;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif /* ! HAVE_GETPASS */
|
|
||||||
|
|
||||||
|
|
||||||
char *get_tty_password(char *opt_message, char *buff, int bufflen)
|
|
||||||
{
|
|
||||||
#ifdef HAVE_GETPASS
|
|
||||||
char *passbuff;
|
|
||||||
#else /* ! HAVE_GETPASS */
|
|
||||||
TERMIO org,tmp;
|
|
||||||
#endif /* HAVE_GETPASS */
|
|
||||||
|
|
||||||
DBUG_ENTER("get_tty_password");
|
|
||||||
|
|
||||||
#ifdef HAVE_GETPASS
|
|
||||||
passbuff = getpass(opt_message ? opt_message : "Enter password: ");
|
|
||||||
|
|
||||||
/* copy the password to buff and clear original (static) buffer */
|
|
||||||
strnmov(buff, passbuff, bufflen - 1);
|
|
||||||
#ifdef _PASSWORD_LEN
|
|
||||||
memset(passbuff, 0, _PASSWORD_LEN);
|
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
if (isatty(fileno(stdout)))
|
|
||||||
{
|
|
||||||
fputs(opt_message ? opt_message : "Enter password: ",stdout);
|
|
||||||
fflush(stdout);
|
|
||||||
}
|
|
||||||
#if defined(HAVE_TERMIOS_H)
|
|
||||||
tcgetattr(fileno(stdin), &org);
|
|
||||||
tmp = org;
|
|
||||||
tmp.c_lflag &= ~(ECHO | ISIG | ICANON);
|
|
||||||
tmp.c_cc[VMIN] = 1;
|
|
||||||
tmp.c_cc[VTIME] = 0;
|
|
||||||
tcsetattr(fileno(stdin), TCSADRAIN, &tmp);
|
|
||||||
get_password(buff, bufflen-1, fileno(stdin), isatty(fileno(stdout)));
|
|
||||||
tcsetattr(fileno(stdin), TCSADRAIN, &org);
|
|
||||||
#elif defined(HAVE_TERMIO_H)
|
|
||||||
ioctl(fileno(stdin), (int) TCGETA, &org);
|
|
||||||
tmp=org;
|
|
||||||
tmp.c_lflag &= ~(ECHO | ISIG | ICANON);
|
|
||||||
tmp.c_cc[VMIN] = 1;
|
|
||||||
tmp.c_cc[VTIME]= 0;
|
|
||||||
ioctl(fileno(stdin),(int) TCSETA, &tmp);
|
|
||||||
get_password(buff,bufflen-1,fileno(stdin),isatty(fileno(stdout)));
|
|
||||||
ioctl(fileno(stdin),(int) TCSETA, &org);
|
|
||||||
#else
|
|
||||||
gtty(fileno(stdin), &org);
|
|
||||||
tmp=org;
|
|
||||||
tmp.sg_flags &= ~ECHO;
|
|
||||||
tmp.sg_flags |= RAW;
|
|
||||||
stty(fileno(stdin), &tmp);
|
|
||||||
get_password(buff,bufflen-1,fileno(stdin),isatty(fileno(stdout)));
|
|
||||||
stty(fileno(stdin), &org);
|
|
||||||
#endif
|
|
||||||
if (isatty(fileno(stdout)))
|
|
||||||
fputc('\n',stdout);
|
|
||||||
#endif /* HAVE_GETPASS */
|
|
||||||
|
|
||||||
DBUG_RETURN(buff);
|
|
||||||
}
|
|
||||||
#endif /*_WIN32*/
|
|
||||||
|
Reference in New Issue
Block a user