From 9d72c915848123a84ddb729f01e3292fdcb2e984 Mon Sep 17 00:00:00 2001 From: "git@daemon.de" Date: Tue, 23 Aug 2016 17:34:57 +0200 Subject: [PATCH] added option -y to support passwords for policy-enabled sites --- dicepwgen.c | 55 +++++++++++++++++++++++++++++++-------------------- dicepwgen.h | 5 +++-- dicepwgen.pod | 9 +++++++-- 3 files changed, 44 insertions(+), 25 deletions(-) diff --git a/dicepwgen.c b/dicepwgen.c index 63e8c63..158ed5a 100644 --- a/dicepwgen.c +++ b/dicepwgen.c @@ -1,7 +1,7 @@ /* * This file is part of dicepwgen * - * Copyright (C) 2015 T.v.Dein. + * Copyright (C) 2015-2016 T.v.Dein. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -23,21 +23,22 @@ int usage() { fprintf(stderr, - "Generate a random diceware passphrase\n" - "Usage: dice [-tcfvhd]\n" - "Options: \n" - "-t --humantoss Asks interactively for rolled dices\n" - "-c --wordcount Number of words (default: 4)\n" - "-f --dictfile Dictionary file to use (default:\n" - " /usr/share/dict/american-english)\n" - "-l --minlen Minimum word len (default: 5)\n" - "-m --maxlen Maximum word len (default: 10)\n" - "-n --dontjump Use all words in the dict file, e.g.\n" - " if it is an original diceware list\n" - "-d --debug Enable debug output\n" - "-v --version Print program version\n" - "-h -? --help Print this help screen\n" - ); + "Generate a random diceware passphrase\n" + "Usage: dice [-tcfvhd]\n" + "Options: \n" + "-t --humantoss Asks interactively for rolled dices\n" + "-c --wordcount Number of words (default: 4)\n" + "-f --dictfile Dictionary file to use (default:\n" + " /usr/share/dict/american-english)\n" + "-l --minlen Minimum word len (default: 5)\n" + "-m --maxlen Maximum word len (default: 10)\n" + "-n --dontjump Use all words in the dict file, e.g.\n" + " if it is an original diceware list\n" + "-y --symbols Replace space with -, add non-letters\n" + "-d --debug Enable debug output\n" + "-v --version Print program version\n" + "-h -? --help Print this help screen\n" + ); return 1; } @@ -48,7 +49,7 @@ int main (int argc, char **argv) { WMIN = 6; WMAX = 10; - humantoss = verbose = dontjump = 0; + humantoss = verbose = dontjump = symbols = 0; static struct option longopts[] = { { "wordcount", required_argument, NULL, 'c' }, @@ -56,13 +57,14 @@ int main (int argc, char **argv) { { "maxlen", required_argument, NULL, 'm' }, { "humantoss", required_argument, NULL, 't' }, { "dictfile", required_argument, NULL, 'f' }, - { "dontjump", no_argument, NULL, 'n' }, + { "dontjump", no_argument, NULL, 'n' }, + { "symbols", no_argument, NULL, 'y' }, { "version", no_argument, NULL, 'v' }, { "help", no_argument, NULL, 'h' }, { "debug", no_argument, NULL, 'd' }, }; - while ((opt = getopt_long(argc, argv, "l:m:tf:c:vh?dn", longopts, NULL)) != -1) { + while ((opt = getopt_long(argc, argv, "l:m:tf:c:vh?dny", longopts, NULL)) != -1) { switch (opt) { case 'v': fprintf(stderr, "This is %s version %s\n", argv[0], VERSION); @@ -84,6 +86,9 @@ int main (int argc, char **argv) { case 't': humantoss = 1; break; + case 'y': + symbols = 1; + break; case 'd': verbose++; break; @@ -130,6 +135,7 @@ void getwords(char *dictfile, int count) { char **words; int i, pos, one, two, three, four, five; int *tossed; + char sep = ' '; unsigned char *tosses; words = fetch_dict(dictfile); @@ -152,10 +158,17 @@ void getwords(char *dictfile, int count) { free(tosses); } - for(i=0; i Maximum word len (default: 10) -n --dontjump Use all words in the dict file, e.g. if it is an original diceware list + -y --symbols Replace space with -, add non-letters -d --debug Enable debug output -v --version Print program version -h -? --help Print this help screen @@ -37,7 +38,11 @@ If you're using a precomputed diceware list, use the parameter B<-n>, in which case dicepwgen will use all entries in the file. The program only uses words which contain 7bit ASCII letters -(a-zA-Z0-9), which are easier for password usage anyway. +(a-zA-Z0-9), which are easier for password usage anyway. However, +some sites have so called "password policies" applied and do +not support whitespaces and/or require special symbols to be +part of the password. Use -y in such cases which uses - as +word separator and adds %8 to the end of the password. =head1 FILES @@ -91,7 +96,7 @@ again and again til the required number of words has been collected (7776). This software is licensed under the GNU GENERAL PUBLIC LICENSE version 3. -Copyright (c) 2015 by T. v. Dein. +Copyright (c) 2015-2016 by T. v. Dein. =head1 AUTHORS