Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _POSIX_SOURCE 1
- #include <stdio.h>
- #include <stdlib.h>
- #include <termios.h>
- #include <unistd.h>
- #include <signal.h>
- #include <sys/types.h>
- #define len 8
- struct termios old, new;
- void sig_handle (int signo)
- {
- tcsetattr(STDIN_FILENO,TCSANOW,&old);
- fprintf(stderr, "Abbruch durch Signal : %d\n", signo);
- exit (0);
- }
- int setRawMode ()
- {
- signal (SIGINT, sig_handle);
- signal (SIGQUIT, sig_handle);
- if(tcgetattr(STDIN_FILENO, &old) != 0)
- {
- return -1;
- }
- new=old;
- new.c_lflag &= ~ICANON;
- new.c_lflag &= ~ECHO;
- new.c_cc[VMIN] = 1;
- new.c_cc[VTIME] = 0;
- return (tcsetattr(STDIN_FILENO, TCSANOW, &new));
- }
- int restoreNormalMode()
- {
- return (tcsetattr(STDIN_FILENO, TCSANOW, &old));
- }
- int getpasswd(char *s, int n)
- {
- if(setRawMode() != 0)
- {
- printf("\n\nRawMode konnte nicht gesetzt werden!\n\n");
- return EXIT_FAILURE;
- }
- printf("Passwort: ");
- int i = 0,a;
- do
- {
- a=getchar();
- if(33<=a && a!=127) //127 Backspace, drueber Laenderspeziefisch
- {
- s[i] = a;
- printf("*");
- i++;
- }
- if(a == '\n' || i >= n)
- {
- break;
- }
- }
- while(1);
- restoreNormalMode();
- return i;
- }
- int main(int argc, char *argv[])
- {
- char *s = malloc((len + 1) * sizeof(char));
- int i,n = len;
- i = getpasswd(s, n);
- printf("\n\nPasswort: %s", s );
- printf("\nPasswortlaenge: %d\n\n", i );
- return 0;
- }
Add Comment
Please, Sign In to add comment