(libc.info.gz) getpass

Info Catalog (libc.info.gz) Legal Problems (libc.info.gz) Cryptographic Functions (libc.info.gz) crypt
 
 33.2 Reading Passwords
 ======================
 
 When reading in a password, it is desirable to avoid displaying it on
 the screen, to help keep it secret.  The following function handles this
 in a convenient way.
 
  -- Function: char * getpass (const char *PROMPT)
      Preliminary: | MT-Unsafe term | AS-Unsafe heap lock corrupt |
      AC-Unsafe term lock corrupt |  POSIX Safety Concepts.
 
      'getpass' outputs PROMPT, then reads a string in from the terminal
      without echoing it.  It tries to connect to the real terminal,
      '/dev/tty', if possible, to encourage users not to put plaintext
      passwords in files; otherwise, it uses 'stdin' and 'stderr'.
      'getpass' also disables the INTR, QUIT, and SUSP characters on the
      terminal using the 'ISIG' terminal attribute ( Local Modes).
      The terminal is flushed before and after 'getpass', so that
      characters of a mistyped password are not accidentally visible.
 
      In other C libraries, 'getpass' may only return the first
      'PASS_MAX' bytes of a password.  The GNU C Library has no limit, so
      'PASS_MAX' is undefined.
 
      The prototype for this function is in 'unistd.h'.  'PASS_MAX' would
      be defined in 'limits.h'.
 
    This precise set of operations may not suit all possible situations.
 In this case, it is recommended that users write their own 'getpass'
 substitute.  For instance, a very simple substitute is as follows:
 
 
      #include <termios.h>
      #include <stdio.h>
 
      ssize_t
      my_getpass (char **lineptr, size_t *n, FILE *stream)
      {
        struct termios old, new;
        int nread;
 
        /* Turn echoing off and fail if we can't. */
        if (tcgetattr (fileno (stream), &old) != 0)
          return -1;
        new = old;
        new.c_lflag &= ~ECHO;
        if (tcsetattr (fileno (stream), TCSAFLUSH, &new) != 0)
          return -1;
 
        /* Read the password. */
        nread = getline (lineptr, n, stream);
 
        /* Restore terminal. */
        (void) tcsetattr (fileno (stream), TCSAFLUSH, &old);
 
        return nread;
      }
 
    The substitute takes the same parameters as 'getline' ( Line
 Input); the user must print any prompt desired.
 
Info Catalog (libc.info.gz) Legal Problems (libc.info.gz) Cryptographic Functions (libc.info.gz) crypt
automatically generated by info2html