summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomas Mraz <tmraz@fedoraproject.org>2020-03-24 09:20:31 +0100
committerTomas Mraz <tmraz@fedoraproject.org>2020-03-24 09:20:31 +0100
commit8c8a2605ae026dd6dc7b66ff03e73caac1a6bdf4 (patch)
treed584c4b2cf3882e540ffaabfb25ed9473ba01ba0
parentb8fa71565dba7a42454f6100eb761a610d966bbe (diff)
downloadlibpwquality-git-8c8a2605ae026dd6dc7b66ff03e73caac1a6bdf4.tar.gz
pwmake: Properly validate the bits parameter.
Fixes: #33
-rw-r--r--src/pwmake.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/pwmake.c b/src/pwmake.c
index 81f7cd3..8d32d1e 100644
--- a/src/pwmake.c
+++ b/src/pwmake.c
@@ -14,6 +14,7 @@
#include <errno.h>
#include <libgen.h>
#include <locale.h>
+#include <limits.h>
#include "pwquality.h"
@@ -29,8 +30,9 @@ main(int argc, char *argv[])
{
pwquality_settings_t *pwq;
char *password;
+ char *endptr;
int rv;
- int bits;
+ long bits;
void *auxerror;
#ifdef ENABLE_NLS
@@ -44,7 +46,18 @@ main(int argc, char *argv[])
exit(3);
}
- bits = atoi(argv[1]);
+ errno = 0;
+ bits = strtol(argv[1], &endptr, 10);
+ if (errno != 0 || *argv[1] == '\0' ||
+ *endptr != '\0' || bits >= INT_MAX || bits <= INT_MIN) {
+ usage(basename(argv[0]));
+ exit(4);
+ }
+
+ if (bits > PWQ_MAX_ENTROPY_BITS || bits < PWQ_MIN_ENTROPY_BITS) {
+ fprintf(stderr, _("Warning: Value %ld is outside of the allowed entropy range, adjusting it.\n"),
+ bits);
+ }
pwq = pwquality_default_settings();
if (pwq == NULL) {
@@ -58,7 +71,7 @@ main(int argc, char *argv[])
exit(3);
}
- rv = pwquality_generate(pwq, bits, &password);
+ rv = pwquality_generate(pwq, (int)bits, &password);
pwquality_free_settings(pwq);
if (rv != 0) {