~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to libdrizzle/get_password.c

Merged build changes from Antony.

Show diffs side-by-side

added added

removed removed

Lines of Context:
21
21
** Ask for a password from tty
22
22
** This is an own file to avoid conflicts with curses
23
23
*/
24
 
#include <my_global.h>
25
 
#include <my_sys.h>
 
24
#include <drizzled/global.h>
 
25
#include <mysys/my_sys.h>
26
26
#include "drizzle.h"
27
 
#include <m_string.h>
28
 
#include <m_ctype.h>
 
27
#include <mystrings/m_string.h>
 
28
#include <mystrings/m_ctype.h>
29
29
 
30
30
#if defined(HAVE_BROKEN_GETPASS) && !defined(HAVE_GETPASSPHRASE)
31
31
#undef HAVE_GETPASS
32
32
#endif
33
33
 
34
34
#ifdef HAVE_GETPASS
35
 
#ifdef HAVE_PWD_H
36
 
#include <pwd.h>
37
 
#endif /* HAVE_PWD_H */
 
35
# ifdef HAVE_PWD_H
 
36
#   include <pwd.h>
 
37
# endif /* HAVE_PWD_H */
38
38
#else /* ! HAVE_GETPASS */
39
 
#if !defined(__WIN__) && !defined(__NETWARE__)
40
 
#include <sys/ioctl.h>
41
 
#ifdef HAVE_TERMIOS_H                           /* For tty-password */
42
 
#include        <termios.h>
43
 
#define TERMIO  struct termios
44
 
#else
45
 
#ifdef HAVE_TERMIO_H                            /* For tty-password */
46
 
#include        <termio.h>
47
 
#define TERMIO  struct termio
48
 
#else
49
 
#include        <sgtty.h>
50
 
#define TERMIO  struct sgttyb
51
 
#endif
52
 
#endif
53
 
#ifdef alpha_linux_port
54
 
#include <asm/ioctls.h>                         /* QQ; Fix this in configure */
55
 
#include <asm/termiobits.h>
56
 
#endif
57
 
#else
58
 
#ifndef __NETWARE__
59
 
#include <conio.h>
60
 
#endif /* __NETWARE__ */
61
 
#endif /* __WIN__ */
 
39
# if !defined(__WIN__) && !defined(__NETWARE__)
 
40
#   include <sys/ioctl.h>
 
41
#   ifdef HAVE_TERMIOS_H                                /* For tty-password */
 
42
#     include   <termios.h>
 
43
#     define TERMIO     struct termios
 
44
#   else
 
45
#     ifdef HAVE_TERMIO_H                               /* For tty-password */
 
46
#       include <termio.h>
 
47
#       define TERMIO   struct termio
 
48
#     else
 
49
#       include <sgtty.h>
 
50
#       define TERMIO   struct sgttyb
 
51
#     endif
 
52
#   endif
 
53
#   ifdef alpha_linux_port
 
54
#     include <asm/ioctls.h>                            /* QQ; Fix this in configure */
 
55
#     include <asm/termiobits.h>
 
56
#   endif
 
57
# else
 
58
#   ifndef __NETWARE__
 
59
#     include <conio.h>
 
60
#   endif /* ! __NETWARE__ */
 
61
# endif /* ! __WIN__ AND ! __NETWARE__ */
62
62
#endif /* HAVE_GETPASS */
63
63
 
64
64
#ifdef HAVE_GETPASSPHRASE                       /* For Solaris */
65
65
#define getpass(A) getpassphrase(A)
66
66
#endif
67
67
 
68
 
#if defined( __WIN__) || defined(__NETWARE__)
69
 
/* were just going to fake it here and get input from the keyboard */
70
 
 
71
 
#ifdef __NETWARE__
72
 
#undef _getch
73
 
#undef _cputs
74
 
#define _getch getcharacter
75
 
#define _cputs(A) putstring(A)
76
 
#endif
77
 
 
 
68
#if defined( __WIN__)
78
69
char *get_tty_password(const char *opt_message)
79
70
{
80
71
  char to[80];
110
101
 
111
102
#else
112
103
 
113
 
#ifndef HAVE_GETPASS
 
104
# ifndef HAVE_GETPASS
114
105
/*
115
106
  Can't use fgets, because readline will get confused
116
107
  length is max number of chars in to, not counting \0
155
146
  *pos=0;
156
147
  return;
157
148
}
158
 
#endif /* ! HAVE_GETPASS */
 
149
# endif /* ! HAVE_GETPASS */
159
150
 
160
151
 
161
152
char *get_tty_password(const char *opt_message)
162
153
{
163
 
#ifdef HAVE_GETPASS
 
154
# ifdef HAVE_GETPASS
164
155
  char *passbuff;
165
 
#else /* ! HAVE_GETPASS */
 
156
# else /* ! HAVE_GETPASS */
166
157
  TERMIO org,tmp;
167
 
#endif /* HAVE_GETPASS */
 
158
# endif /* HAVE_GETPASS */
168
159
  char buff[80];
169
160
 
170
 
#ifdef HAVE_GETPASS
 
161
# ifdef HAVE_GETPASS
171
162
  passbuff = getpass(opt_message ? opt_message : "Enter password: ");
172
163
 
173
164
  /* copy the password to buff and clear original (static) buffer */
174
165
  strnmov(buff, passbuff, sizeof(buff) - 1);
175
 
#ifdef _PASSWORD_LEN
 
166
#   ifdef _PASSWORD_LEN
176
167
  memset(passbuff, 0, _PASSWORD_LEN);
177
 
#endif
178
 
#else 
 
168
#   endif
 
169
# else /* ! HAVE_GETPASS */
179
170
  if (isatty(fileno(stdout)))
180
171
  {
181
172
    fputs(opt_message ? opt_message : "Enter password: ",stdout);
182
173
    fflush(stdout);
183
174
  }
184
 
#if defined(HAVE_TERMIOS_H)
 
175
#   if defined(HAVE_TERMIOS_H)
185
176
  tcgetattr(fileno(stdin), &org);
186
177
  tmp = org;
187
178
  tmp.c_lflag &= ~(ECHO | ISIG | ICANON);
190
181
  tcsetattr(fileno(stdin), TCSADRAIN, &tmp);
191
182
  get_password(buff, sizeof(buff)-1, fileno(stdin), isatty(fileno(stdout)));
192
183
  tcsetattr(fileno(stdin), TCSADRAIN, &org);
193
 
#elif defined(HAVE_TERMIO_H)
 
184
#   elif defined(HAVE_TERMIO_H)
194
185
  ioctl(fileno(stdin), (int) TCGETA, &org);
195
186
  tmp=org;
196
187
  tmp.c_lflag &= ~(ECHO | ISIG | ICANON);
199
190
  ioctl(fileno(stdin),(int) TCSETA, &tmp);
200
191
  get_password(buff,sizeof(buff)-1,fileno(stdin),isatty(fileno(stdout)));
201
192
  ioctl(fileno(stdin),(int) TCSETA, &org);
202
 
#else
 
193
#   else
203
194
  gtty(fileno(stdin), &org);
204
195
  tmp=org;
205
196
  tmp.sg_flags &= ~ECHO;
207
198
  stty(fileno(stdin), &tmp);
208
199
  get_password(buff,sizeof(buff)-1,fileno(stdin),isatty(fileno(stdout)));
209
200
  stty(fileno(stdin), &org);
210
 
#endif
 
201
#   endif
211
202
  if (isatty(fileno(stdout)))
212
203
    fputc('\n',stdout);
213
 
#endif /* HAVE_GETPASS */
 
204
# endif /* HAVE_GETPASS */
214
205
 
215
206
  return(my_strdup(buff,MYF(MY_FAE)));
216
207
}