Linux
Application Development |
Michael K. Johnson Erik W. Troan |
/* readpass - read a password without echoing it */ #include <stdio.h> #include <termios.h> #include <unistd.h> int main(void) { struct termios ts, ots; char passbuf[1024]; /* get and save current termios settings */ tcgetattr(STDIN_FILENO, &ts); ots = ts; /* change and set new termios settings */ ts.c_lflag &= ~ECHO; ts.c_lflag |= ECHONL; tcsetattr(STDIN_FILENO, TCSAFLUSH, &ts); /* paranoia: check that the settings took effect */ tcgetattr(STDIN_FILENO, &ts); if (ts.c_lflag & ECHO) { fprintf(stderr, "Failed to turn off echo\n"); tcsetattr(STDIN_FILENO, TCSANOW, &ots); exit(1); } /* get and print the password */ printf("enter password: "); fflush(stdout); fgets(passbuf, 1024, stdin); printf("read password: %s", passbuf); /* there was a terminal \n in passbuf */ /* restore old termios settings */ tcsetattr(STDIN_FILENO, TCSANOW, &ots); exit(0); }