aboutsummaryrefslogtreecommitdiffstats
path: root/src/cerberus.c
diff options
context:
space:
mode:
authorMattias Andrée <maandree@operamail.com>2013-11-03 04:23:36 +0100
committerMattias Andrée <maandree@operamail.com>2013-11-03 04:23:36 +0100
commitcc24994b9be9269e93332293e6fbeccf4043a128 (patch)
tree3669ced9845990c6292ce4ab3068261ae90afe18 /src/cerberus.c
parentdisabling echo + parsing cmdline args (diff)
downloadlibpassphrase-cc24994b9be9269e93332293e6fbeccf4043a128.tar.gz
libpassphrase-cc24994b9be9269e93332293e6fbeccf4043a128.tar.bz2
libpassphrase-cc24994b9be9269e93332293e6fbeccf4043a128.tar.xz
read passphrase
Signed-off-by: Mattias Andrée <maandree@operamail.com>
Diffstat (limited to 'src/cerberus.c')
-rw-r--r--src/cerberus.c37
1 files changed, 26 insertions, 11 deletions
diff --git a/src/cerberus.c b/src/cerberus.c
index 5f4afdc..a9772c9 100644
--- a/src/cerberus.c
+++ b/src/cerberus.c
@@ -17,9 +17,13 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdio.h>
-#include <termios.h>
#include <unistd.h>
+#include "passphrase.h"
+
+
+#define xfree(VAR) ({ if (var) free(var); })
+
/**
* Mane method
@@ -32,24 +36,26 @@ int main(int argc, char** argv)
{
char* username = NULL;
char* hostname = NULL;
+ char* passphrase = NULL;
char preserve_env = 0;
- struct termios saved_stty;
- struct termios stty;
- int i;
+ char skip_auth = 0;
/* Disable echoing */
- tcgetattr(STDIN_FILENO, &saved_stty);
- stty = saved_stty;
- stty.c_lflag &= ~ECHO;
- tcsetattr(STDIN_FILENO, TCSAFLUSH, &stty);
+ disable_echo();
/* This should be done as early and quickly as possible so as little
as possible of the passphrase gets leaked to the output if the user
begins entering the passphrase directly after the username. */
+
+ /* Set proccess group ID */
+ setpgrp();
+
+
/* Parse command line arguments */
{
char double_dashed = 0;
char hostname_on_next = 0;
+ int i;
for (i = 1; i < argc; i++)
{
char *arg = *(argv + i);
@@ -75,6 +81,7 @@ int main(int argc, char** argv)
{
if (*(arg + 1))
username = arg + 1;
+ skip_auth = 1;
break;
}
else if (c == '-')
@@ -94,13 +101,21 @@ int main(int argc, char** argv)
}
}
- printf("Passphrase: ");
- fflush(stdout);
+
+ /* Get the passphrase, if -f has not been used */
+ if (skip_auth == 0)
+ {
+ printf("Passphrase: ");
+ fflush(stdout);
+ passphrase = get_passphrase();
+ printf("\n");
+ }
/* Reset terminal settings */
- tcsetattr(STDIN_FILENO, TCSAFLUSH, &saved_stty);
+ reenable_echo();
+ xfree(passphrase);
return 0;
}