diff options
author | Nicholas Tay <nick@windblume.net> | 2021-12-01 00:05:16 +1100 |
---|---|---|
committer | Nicholas Tay <nick@windblume.net> | 2021-12-01 00:05:16 +1100 |
commit | 68315feb59829570872ab5a0a54d6d12ad6b4d84 (patch) | |
tree | 489e4558e9a7c3998b7217c9cb17e3727f8c05c8 /passgen.c | |
parent | d62b1765f6a0fddff02c837e797bb54da920aaf5 (diff) | |
download | passgen-68315feb59829570872ab5a0a54d6d12ad6b4d84.tar.gz passgen-68315feb59829570872ab5a0a54d6d12ad6b4d84.tar.bz2 passgen-68315feb59829570872ab5a0a54d6d12ad6b4d84.zip |
Take in triplet/specials/numbers arguments
Diffstat (limited to '')
-rw-r--r-- | passgen.c | 34 |
1 files changed, 32 insertions, 2 deletions
@@ -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;
|