summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco d'Itri <md@linux.it>2018-09-11 01:21:52 +0200
committerMarco d'Itri <md@linux.it>2018-09-20 00:18:06 +0200
commit3197cb7db4d5ce13f1d011cfa6f9e42164d9b091 (patch)
tree409ffa5024733de65627223a31ea50366c2c8e40
parent61f4e5d64c9ad64ff6b70bb2bf0afb3165bb9c51 (diff)
downloadwhois-3197cb7db4d5ce13f1d011cfa6f9e42164d9b091.tar.gz
mkpasswd: support letting crypt_gensalt decide the prefix
If crypt_gensalt (as implemented by Solaris and modern versions of libxcrypt) is passed a NULL prefix then it will decide by itself which algorithm should be used by default.
-rw-r--r--config.h1
-rw-r--r--mkpasswd.c13
2 files changed, 11 insertions, 3 deletions
diff --git a/config.h b/config.h
index 66f7e71..be20c33 100644
--- a/config.h
+++ b/config.h
@@ -56,6 +56,7 @@
#if defined __SVR4 && defined __sun
# define HAVE_SHA_CRYPT
# define HAVE_SOLARIS_CRYPT_GENSALT
+# define CRYPT_GENSALT_IMPLEMENTS_DEFAULT_PREFIX
#endif
/* FIXME: which systems lack this? */
diff --git a/mkpasswd.c b/mkpasswd.c
index 3b3406c..26f28d4 100644
--- a/mkpasswd.c
+++ b/mkpasswd.c
@@ -83,6 +83,9 @@ struct crypt_method {
static const struct crypt_method methods[] = {
/* method prefix minlen, maxlen rounds description */
+#ifdef CRYPT_GENSALT_IMPLEMENTS_DEFAULT_PREFIX
+ { "auto", NULL, 0, 0, 0, NULL },
+#endif
{ "des", "", 2, 2, 0,
N_("standard 56 bit DES-based crypt(3)") },
{ "md5", "$1$", 8, 8, 0, "MD5" },
@@ -229,14 +232,17 @@ int main(int argc, char *argv[])
display_help(EXIT_FAILURE);
}
- /* default: DES password */
+ /* default: DES password, or else whatever crypt_gensalt chooses */
if (!salt_prefix) {
salt_minlen = methods[0].minlen;
salt_maxlen = methods[0].maxlen;
salt_prefix = methods[0].prefix;
+ rounds_support = methods[0].rounds;
}
- if (streq(salt_prefix, "$2a$") || streq(salt_prefix, "$2y$")) {
+ if (!salt_prefix) {
+ /* NULL means that crypt_gensalt will choose one later */
+ } else if (streq(salt_prefix, "$2a$") || streq(salt_prefix, "$2b$")) {
/* OpenBSD Blowfish and derivatives */
if (rounds <= 5)
rounds = 5;
@@ -492,7 +498,8 @@ void display_methods(void)
printf(_("Available methods:\n"));
for (i = 0; methods[i].method != NULL; i++)
- printf("%s\t%s\n", methods[i].method, methods[i].desc);
+ if (methods[i].desc)
+ printf("%s\t%s\n", methods[i].method, methods[i].desc);
}
char *read_line(FILE *fp) {