From 68315feb59829570872ab5a0a54d6d12ad6b4d84 Mon Sep 17 00:00:00 2001 From: Nicholas Tay Date: Wed, 1 Dec 2021 00:05:16 +1100 Subject: Take in triplet/specials/numbers arguments --- passgen.c | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/passgen.c b/passgen.c index fd509d2..202809b 100644 --- a/passgen.c +++ b/passgen.c @@ -12,11 +12,36 @@ #define NUMBERS "1234567890" #define SYMBOLS "@#$%^&*_-+=()[]{}" -int main() +int main(int argc, char *argv[]) { char *grammar = DEFAULT_GRAMMAR; int grammar_size = sizeof(DEFAULT_GRAMMAR)-1; - + + if (argc == 4) { + // Take arguments as triplets, specials, numbers + // atoi might be scuffed but so be it (it just goes = 0 if invalid input) + int triplets = atoi(argv[1]); + int specials = atoi(argv[2]); + int numbers = atoi(argv[3]); + + if (triplets < 1) { + printf("ERROR: Cannot have less than one triplet."); + return 1; + } + + grammar_size = triplets * 3 + specials + numbers; + grammar = malloc(grammar_size + 1); + grammar[grammar_size] = 0; + + memcpy(grammar, "Cvc", 3); + for (int i = 1; i < triplets; ++i) + memcpy(grammar + (i * 3), "cvc", 3); + + memset(grammar + (triplets * 3), '!', specials); + memset(grammar + (triplets * 3) + specials, '#', numbers); + //printf("Custom: %s\n", grammar); + } + char password[grammar_size]; // seed RNG; this isn't very good, but it's enough (for now) @@ -49,6 +74,8 @@ int main() setClass(NUMBERS); default: printf("ERROR: Invalid grammar character '%c'.\n", c); + if (grammar != (char*)DEFAULT_GRAMMAR) + free(grammar); return 1; } @@ -57,6 +84,9 @@ int main() } while (i != 0 && password[i] == password[i-1]); } + if (grammar != (char*)DEFAULT_GRAMMAR) + free(grammar); + printf("%s\n", password); return 0; -- cgit