aboutsummaryrefslogtreecommitdiffstats
path: root/package/ead/src/tinysrp/t_getpass.c
diff options
context:
space:
mode:
Diffstat (limited to 'package/ead/src/tinysrp/t_getpass.c')
-rw-r--r--package/ead/src/tinysrp/t_getpass.c191
1 files changed, 0 insertions, 191 deletions
diff --git a/package/ead/src/tinysrp/t_getpass.c b/package/ead/src/tinysrp/t_getpass.c
deleted file mode 100644
index 6ae7fca4de..0000000000
--- a/package/ead/src/tinysrp/t_getpass.c
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * Copyright 1990 - 1995, Julianne Frances Haugh
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of Julianne F. Haugh nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include "t_defines.h"
-#ifdef _WIN32
-#include <windows.h>
-#include <io.h>
-#endif /* _WIN32 */
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif /* HAVE_UNISTD_H */
-#include <signal.h>
-#include <stdio.h>
-
-static int sig_caught;
-#ifdef HAVE_SIGACTION
-static struct sigaction sigact;
-#endif
-
-/*ARGSUSED*/
-static RETSIGTYPE
-sig_catch (sig)
-int sig;
-{
- sig_caught = 1;
-}
-
-_TYPE( int )
-t_getpass (buf, maxlen, prompt)
- char *buf;
- unsigned maxlen;
- const char *prompt;
-{
- char *cp;
-#ifdef _WIN32
- HANDLE handle = (HANDLE) _get_osfhandle(_fileno(stdin));
- DWORD mode;
-
- GetConsoleMode( handle, &mode );
- SetConsoleMode( handle, mode & ~ENABLE_ECHO_INPUT );
-
- if(fputs(prompt, stdout) == EOF ||
- fgets(buf, maxlen, stdin) == NULL) {
- SetConsoleMode(handle,mode);
- return -1;
- }
- cp = buf + strlen(buf) - 1;
- if ( *cp == 0x0a )
- *cp = '\0';
- printf("\n");
- SetConsoleMode(handle,mode);
-#else
- FILE *fp;
- int tty_opened = 0;
-
-#ifdef HAVE_SIGACTION
- struct sigaction old_sigact;
-#else
- RETSIGTYPE (*old_signal)();
-#endif
- TERMIO new_modes;
- TERMIO old_modes;
-
- /*
- * set a flag so the SIGINT signal can be re-sent if it
- * is caught
- */
-
- sig_caught = 0;
-
- /*
- * if /dev/tty can't be opened, getpass() needs to read
- * from stdin instead.
- */
-
- if ((fp = fopen ("/dev/tty", "r")) == 0) {
- fp = stdin;
- setbuf (fp, (char *) 0);
- } else {
- tty_opened = 1;
- }
-
- /*
- * the current tty modes must be saved so they can be
- * restored later on. echo will be turned off, except
- * for the newline character (BSD has to punt on this)
- */
-
- if (GTTY (fileno (fp), &new_modes))
- return -1;
-
- old_modes = new_modes;
-
-#ifdef HAVE_SIGACTION
- sigact.sa_handler = sig_catch;
- (void) sigaction (SIGINT, &sigact, &old_sigact);
-#else
- old_signal = signal (SIGINT, sig_catch);
-#endif
-
-#ifdef USE_SGTTY
- new_modes.sg_flags &= ~ECHO;
-#else
- new_modes.c_iflag &= ~IGNCR;
- new_modes.c_iflag |= ICRNL;
- new_modes.c_oflag |= OPOST|ONLCR;
- new_modes.c_lflag &= ~(ECHO|ECHOE|ECHOK);
- new_modes.c_lflag |= ICANON|ECHONL;
-#endif
-
- if (STTY (fileno (fp), &new_modes))
- goto out;
-
- /*
- * the prompt is output, and the response read without
- * echoing. the trailing newline must be removed. if
- * the fgets() returns an error, a NULL pointer is
- * returned.
- */
-
- if (fputs (prompt, stdout) == EOF)
- goto out;
-
- (void) fflush (stdout);
-
- if (fgets (buf, maxlen, fp) == buf) {
- if ((cp = strchr (buf, '\n')))
- *cp = '\0';
- else
- buf[maxlen - 1] = '\0';
-
-#ifdef USE_SGTTY
- putc ('\n', stdout);
-#endif
- }
- else buf[0] = '\0';
-out:
- /*
- * the old SIGINT handler is restored after the tty
- * modes. then /dev/tty is closed if it was opened in
- * the beginning. finally, if a signal was caught it
- * is sent to this process for normal processing.
- */
-
- if (STTY (fileno (fp), &old_modes))
- { memset (buf, 0, maxlen); return -1; }
-
-#ifdef HAVE_SIGACTION
- (void) sigaction (SIGINT, &old_sigact, NULL);
-#else
- (void) signal (SIGINT, old_signal);
-#endif
-
- if (tty_opened)
- (void) fclose (fp);
-
- if (sig_caught) {
- kill (getpid (), SIGINT);
- memset (buf, 0, maxlen);
- return -1;
- }
-#endif
-
- return 0;
-}