Guest User

Untitled

a guest
May 28th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.57 KB | None | 0 0
  1. #define _POSIX_SOURCE 1
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <termios.h>
  5. #include <unistd.h>
  6. #include <signal.h>
  7. #include <sys/types.h>
  8.  
  9. #define len 8
  10.  
  11. struct termios old, new;
  12.  
  13. void sig_handle (int signo)
  14. {
  15.     tcsetattr(STDIN_FILENO,TCSANOW,&old);
  16.     fprintf(stderr, "Abbruch durch Signal : %d\n", signo);
  17.     exit (0);
  18. }
  19.  
  20. int setRawMode ()
  21. {
  22.     signal (SIGINT, sig_handle);
  23.     signal (SIGQUIT, sig_handle);
  24.  
  25.     if(tcgetattr(STDIN_FILENO, &old) != 0)
  26.     {
  27.         return -1;
  28.     }
  29.     new=old;
  30.     new.c_lflag &= ~ICANON;
  31.     new.c_lflag &= ~ECHO;
  32.     new.c_cc[VMIN] = 1;
  33.     new.c_cc[VTIME] = 0;
  34.  
  35.     return (tcsetattr(STDIN_FILENO, TCSANOW, &new));
  36.  
  37.  
  38. }
  39.  
  40. int restoreNormalMode()
  41. {
  42.     return (tcsetattr(STDIN_FILENO, TCSANOW, &old));
  43. }
  44.  
  45.  
  46.  
  47. int getpasswd(char *s, int n)
  48. {
  49.     if(setRawMode() != 0)
  50.     {
  51.         printf("\n\nRawMode konnte nicht gesetzt werden!\n\n");
  52.         return EXIT_FAILURE;
  53.     }
  54.  
  55.     printf("Passwort: ");
  56.  
  57.     int i = 0,a;
  58.  
  59.     do
  60.     {
  61.        a=getchar();
  62.        if(33<=a && a!=127) //127 Backspace, drueber Laenderspeziefisch
  63.        {
  64.             s[i] = a;
  65.             printf("*");
  66.             i++;
  67.        }
  68.  
  69.        if(a == '\n' || i >= n)
  70.        {
  71.            break;
  72.        }
  73.  
  74.     }
  75.     while(1);
  76.  
  77.  
  78.  
  79.     restoreNormalMode();
  80.  
  81.     return i;
  82.  
  83. }
  84.  
  85.  
  86. int main(int argc, char *argv[])
  87. {
  88.  
  89.     char *s = malloc((len + 1) * sizeof(char));
  90.     int i,n = len;
  91.     i = getpasswd(s, n);
  92.  
  93.     printf("\n\nPasswort: %s", s );
  94.     printf("\nPasswortlaenge: %d\n\n", i );
  95.  
  96.  return 0;
  97. }
Add Comment
Please, Sign In to add comment