make grub_password_get work in userland
This commit is contained in:
		
							parent
							
								
									84a411c0c3
								
							
						
					
					
						commit
						2cb55e6f73
					
				
					 2 changed files with 53 additions and 67 deletions
				
			
		|  | @ -23,6 +23,13 @@ | |||
| #include <grub/term.h> | ||||
| #include <grub/dl.h> | ||||
| 
 | ||||
| #ifdef GRUB_UTIL | ||||
| #include <termios.h> | ||||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
| #include <stdio.h> | ||||
| #endif | ||||
| 
 | ||||
| GRUB_MOD_LICENSE ("GPLv3+"); | ||||
| 
 | ||||
| struct grub_crypto_hmac_handle | ||||
|  | @ -414,10 +421,43 @@ grub_crypto_memcmp (const void *a, const void *b, grub_size_t n) | |||
|   return !!counter; | ||||
| } | ||||
| 
 | ||||
| #ifndef GRUB_MKPASSWD | ||||
| int | ||||
| grub_password_get (char buf[], unsigned buf_size) | ||||
| { | ||||
| #ifdef GRUB_UTIL | ||||
|   FILE *in; | ||||
|   struct termios s, t; | ||||
|   int tty_changed = 0; | ||||
|   char *ptr; | ||||
| 
 | ||||
|   /* Disable echoing. Based on glibc.  */ | ||||
|   in = fopen ("/dev/tty", "w+c"); | ||||
|   if (in == NULL) | ||||
|     in = stdin; | ||||
| 
 | ||||
|   if (tcgetattr (fileno (in), &t) == 0) | ||||
|     { | ||||
|       /* Save the old one. */ | ||||
|       s = t; | ||||
|       /* Tricky, tricky. */ | ||||
|       t.c_lflag &= ~(ECHO|ISIG); | ||||
|       tty_changed = (tcsetattr (fileno (in), TCSAFLUSH, &t) == 0); | ||||
|     } | ||||
|   else | ||||
|     tty_changed = 0; | ||||
|   fgets (buf, buf_size, stdin); | ||||
|   ptr = buf + strlen (buf) - 1; | ||||
|   while (buf <= ptr && (*ptr == '\n' || *ptr == '\r')) | ||||
|     *ptr-- = 0; | ||||
|   /* Restore the original setting.  */ | ||||
|   if (tty_changed) | ||||
|     (void) tcsetattr (fileno (in), TCSAFLUSH, &s); | ||||
| 
 | ||||
|   grub_xputs ("\n"); | ||||
|   grub_refresh (); | ||||
| 
 | ||||
|   return 1; | ||||
| #else | ||||
|   unsigned cur_len = 0; | ||||
|   int key; | ||||
| 
 | ||||
|  | @ -452,5 +492,5 @@ grub_password_get (char buf[], unsigned buf_size) | |||
|   grub_refresh (); | ||||
| 
 | ||||
|   return (key != '\e'); | ||||
| } | ||||
| #endif | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue