summaryrefslogtreecommitdiff
path: root/src/getpass.c
diff options
context:
space:
mode:
authorYang Tse <yangsita@gmail.com>2011-10-06 17:39:00 +0200
committerYang Tse <yangsita@gmail.com>2011-10-06 17:39:00 +0200
commitf7bfdbabf2d5398f4c266eabb0992a04af661f22 (patch)
tree694a1f91f1aeffaf7aea0f29a05179079af7d700 /src/getpass.c
parent7afccf7a1ebb211905de6abd415fce416058a126 (diff)
downloadcurl-f7bfdbabf2d5398f4c266eabb0992a04af661f22.tar.gz
curl tool: reviewed code moved to tool_*.[ch] files
Diffstat (limited to 'src/getpass.c')
-rw-r--r--src/getpass.c265
1 files changed, 0 insertions, 265 deletions
diff --git a/src/getpass.c b/src/getpass.c
deleted file mode 100644
index a154d107c..000000000
--- a/src/getpass.c
+++ /dev/null
@@ -1,265 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "setup.h"
-
-#ifndef HAVE_GETPASS_R
-/* this file is only for systems without getpass_r() */
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-#ifdef HAVE_TERMIOS_H
-#include <termios.h>
-#else
-#ifdef HAVE_TERMIO_H
-#include <termio.h>
-#endif
-#endif
-
-#ifdef __VMS
-# include descrip
-# include starlet
-# include iodef
-#endif
-
-#ifdef WIN32
-# include <conio.h>
-#endif
-
-#ifdef NETWARE
-# ifdef __NOVELL_LIBC__
-# include <screen.h>
-# else
-# include <nwconio.h>
-# endif
-#endif
-
-#include "getpass.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-#ifdef __VMS
-/* VMS implementation */
-char *getpass_r(const char *prompt, char *buffer, size_t buflen)
-{
- long sts;
- short chan;
-
- /* MSK, 23-JAN-2004, iosbdef.h wasn't in VAX V7.2 or CC 6.4 */
- /* distribution so I created this. May revert back later to */
- /* struct _iosb iosb; */
- struct _iosb
- {
- short int iosb$w_status; /* status */
- short int iosb$w_bcnt; /* byte count */
- int unused; /* unused */
- } iosb;
-
- $DESCRIPTOR(ttdesc, "TT");
-
- buffer[0]='\0';
- sts = sys$assign(&ttdesc, &chan,0,0);
- if(sts & 1) {
- sts = sys$qiow(0, chan,
- IO$_READPROMPT | IO$M_NOECHO,
- &iosb, 0, 0, buffer, buflen, 0, 0,
- prompt, strlen(prompt));
-
- if((sts & 1) && (iosb.iosb$w_status&1))
- buffer[iosb.iosb$w_bcnt] = '\0';
-
- sts = sys$dassgn(chan);
- }
- return buffer; /* we always return success */
-}
-#define DONE
-#endif /* __VMS */
-
-#ifdef __SYMBIAN32__
-#define getch() getchar()
-#endif
-
-#if defined(WIN32) || defined(__SYMBIAN32__)
-
-char *getpass_r(const char *prompt, char *buffer, size_t buflen)
-{
- size_t i;
- fputs(prompt, stderr);
-
- for(i=0; i<buflen; i++) {
- buffer[i] = (char)getch();
- if(buffer[i] == '\r' || buffer[i] == '\n') {
- buffer[i] = 0;
- break;
- }
- else
- if(buffer[i] == '\b')
- /* remove this letter and if this is not the first key, remove the
- previous one as well */
- i = i - (i>=1?2:1);
- }
-#ifndef __SYMBIAN32__
- /* since echo is disabled, print a newline */
- fputs("\n", stderr);
-#endif
- /* if user didn't hit ENTER, terminate buffer */
- if(i==buflen)
- buffer[buflen-1]=0;
-
- return buffer; /* we always return success */
-}
-#define DONE
-#endif /* WIN32 || __SYMBIAN32__ */
-
-#ifdef NETWARE
-/* NetWare implementation */
-#ifdef __NOVELL_LIBC__
-char *getpass_r(const char *prompt, char *buffer, size_t buflen)
-{
- return getpassword(prompt, buffer, buflen);
-}
-#else
-char *getpass_r(const char *prompt, char *buffer, size_t buflen)
-{
- size_t i = 0;
-
- printf("%s", prompt);
- do {
- buffer[i++] = getch();
- if(buffer[i-1] == '\b') {
- /* remove this letter and if this is not the first key,
- remove the previous one as well */
- if(i > 1) {
- printf("\b \b");
- i = i - 2;
- }
- else {
- RingTheBell();
- i = i - 1;
- }
- }
- else if(buffer[i-1] != 13)
- putchar('*');
-
- } while((buffer[i-1] != 13) && (i < buflen));
- buffer[i-1] = 0;
- printf("\r\n");
- return buffer;
-}
-#endif /* __NOVELL_LIBC__ */
-#define DONE
-#endif /* NETWARE */
-
-#ifndef DONE /* not previously provided */
-
-#ifdef HAVE_TERMIOS_H
-#define struct_term struct termios
-#else
-#ifdef HAVE_TERMIO_H
-#define struct_term struct termio
-#else
-#undef struct_term
-#endif
-#endif
-
-static bool ttyecho(bool enable, int fd)
-{
-#ifdef struct_term
- static struct_term withecho;
- static struct_term noecho;
-#endif
- if(!enable) {
- /* disable echo by extracting the current 'withecho' mode and remove the
- ECHO bit and set back the struct */
-#ifdef HAVE_TERMIOS_H
- tcgetattr(fd, &withecho);
- noecho = withecho;
- noecho.c_lflag &= ~ECHO;
- tcsetattr(fd, TCSANOW, &noecho);
-#else /* HAVE_TERMIOS_H */
-#ifdef HAVE_TERMIO_H
- ioctl(fd, TCGETA, &withecho);
- noecho = withecho;
- noecho.c_lflag &= ~ECHO;
- ioctl(fd, TCSETA, &noecho);
-#else /* HAVE_TERMIO_H */
-/* neither HAVE_TERMIO_H nor HAVE_TERMIOS_H, we can't disable echo! */
- (void)fd; /* prevent compiler warning on unused variable */
- return FALSE; /* not disabled */
-#endif
-#endif
- return TRUE; /* disabled */
- }
- else {
- /* re-enable echo, assumes we disabled it before (and set the structs we
- now use to reset the terminal status) */
-#ifdef HAVE_TERMIOS_H
- tcsetattr(fd, TCSAFLUSH, &withecho);
-#else /* HAVE_TERMIOS_H */
-#ifdef HAVE_TERMIO_H
- ioctl(fd, TCSETA, &withecho);
-#else
-/* neither HAVE_TERMIO_H nor HAVE_TERMIOS_H */
- return FALSE; /* not enabled */
-#endif
-#endif
- return TRUE; /* enabled */
- }
-}
-
-char *getpass_r(const char *prompt, /* prompt to display */
- char *password, /* buffer to store password in */
- size_t buflen) /* size of buffer to store password in */
-{
- ssize_t nread;
- bool disabled;
- int fd=open("/dev/tty", O_RDONLY);
- if(-1 == fd)
- fd = 1; /* use stdin if the tty couldn't be used */
-
- disabled = ttyecho(FALSE, fd); /* disable terminal echo */
-
- fputs(prompt, stderr);
- nread=read(fd, password, buflen);
- if(nread > 0)
- password[--nread]=0; /* zero terminate where enter is stored */
- else
- password[0]=0; /* got nothing */
-
- if(disabled) {
- /* if echo actually was disabled, add a newline */
- fputs("\n", stderr);
- (void)ttyecho(TRUE, fd); /* enable echo */
- }
-
- if(1 != fd)
- close(fd);
-
- return password; /* return pointer to buffer */
-}
-
-#endif /* DONE */
-#endif /* HAVE_GETPASS_R */