From 4a445f580ba131b5b63d4dbfdd35573353d656de Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 8 Oct 2013 17:51:39 +0200 Subject: [PATCH] Move password-querying (util-version) routines to grub-core/osdep. --- ChangeLog | 4 ++ Makefile.util.def | 1 + grub-core/lib/crypto.c | 73 ++---------------------------- grub-core/osdep/password.c | 5 ++ grub-core/osdep/unix/password.c | 66 +++++++++++++++++++++++++++ grub-core/osdep/windows/password.c | 51 +++++++++++++++++++++ 6 files changed, 130 insertions(+), 70 deletions(-) create mode 100644 grub-core/osdep/password.c create mode 100644 grub-core/osdep/unix/password.c create mode 100644 grub-core/osdep/windows/password.c diff --git a/ChangeLog b/ChangeLog index 304d27e1b..c08a045f3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-10-08 Vladimir Serbinenko + + Move password-querying (util-version) routines to grub-core/osdep. + 2013-10-08 Vladimir Serbinenko Move sleep routines to grub-core/osdep. diff --git a/Makefile.util.def b/Makefile.util.def index 229489a7a..9d781be14 100644 --- a/Makefile.util.def +++ b/Makefile.util.def @@ -18,6 +18,7 @@ library = { common = grub-core/osdep/hostdisk.c; common = grub-core/osdep/unix/hostdisk.c; common = grub-core/osdep/sleep.c; + common = grub-core/osdep/password.c; common = grub-core/kern/emu/misc.c; common = grub-core/kern/emu/mm.c; common = grub-core/kern/env.c; diff --git a/grub-core/lib/crypto.c b/grub-core/lib/crypto.c index dc1cb58cb..4d360aa67 100644 --- a/grub-core/lib/crypto.c +++ b/grub-core/lib/crypto.c @@ -25,17 +25,6 @@ #include #include -#ifdef GRUB_UTIL -#if !defined (_WIN32) || defined (__CYGWIN__) -#include -#else -#include -#endif -#include -#include -#include -#endif - GRUB_MOD_LICENSE ("GPLv3+"); struct grub_crypto_hmac_handle @@ -441,67 +430,11 @@ grub_crypto_memcmp (const void *a, const void *b, grub_size_t n) return !!counter; } +#ifndef GRUB_UTIL + int grub_password_get (char buf[], unsigned buf_size) { -#ifdef GRUB_UTIL -#if !defined (_WIN32) || defined (__CYGWIN__) - FILE *in; - struct termios s, t; - int tty_changed = 0; - char *ptr; - - grub_refresh (); - - /* 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 - HANDLE hStdin = GetStdHandle (STD_INPUT_HANDLE); - DWORD mode = 0; - char *ptr; - - grub_refresh (); - - GetConsoleMode (hStdin, &mode); - SetConsoleMode (hStdin, mode & (~ENABLE_ECHO_INPUT)); - - fgets (buf, buf_size, stdin); - ptr = buf + strlen (buf) - 1; - while (buf <= ptr && (*ptr == '\n' || *ptr == '\r')) - *ptr-- = 0; - - SetConsoleMode (hStdin, mode); - - grub_refresh (); - - return 1; -#endif -#else unsigned cur_len = 0; int key; @@ -536,6 +469,6 @@ grub_password_get (char buf[], unsigned buf_size) grub_refresh (); return (key != '\e'); -#endif } +#endif diff --git a/grub-core/osdep/password.c b/grub-core/osdep/password.c new file mode 100644 index 000000000..1a7615ecd --- /dev/null +++ b/grub-core/osdep/password.c @@ -0,0 +1,5 @@ +#if defined (__MINGW32__) && !defined (__CYGWIN__) +#include "windows/password.c" +#else +#include "unix/password.c" +#endif diff --git a/grub-core/osdep/unix/password.c b/grub-core/osdep/unix/password.c new file mode 100644 index 000000000..2e647c766 --- /dev/null +++ b/grub-core/osdep/unix/password.c @@ -0,0 +1,66 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2006 + * 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include + +#include +#include +#include +#include + +int +grub_password_get (char buf[], unsigned buf_size) +{ + FILE *in; + struct termios s, t; + int tty_changed = 0; + char *ptr; + + grub_refresh (); + + /* 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; +} diff --git a/grub-core/osdep/windows/password.c b/grub-core/osdep/windows/password.c new file mode 100644 index 000000000..1d3af0c2c --- /dev/null +++ b/grub-core/osdep/windows/password.c @@ -0,0 +1,51 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2006 + * 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include + +#include +#include +#include +#include + +int +grub_password_get (char buf[], unsigned buf_size) +{ + HANDLE hStdin = GetStdHandle (STD_INPUT_HANDLE); + DWORD mode = 0; + char *ptr; + + grub_refresh (); + + GetConsoleMode (hStdin, &mode); + SetConsoleMode (hStdin, mode & (~ENABLE_ECHO_INPUT)); + + fgets (buf, buf_size, stdin); + ptr = buf + strlen (buf) - 1; + while (buf <= ptr && (*ptr == '\n' || *ptr == '\r')) + *ptr-- = 0; + + SetConsoleMode (hStdin, mode); + + grub_refresh (); + + return 1; +}