diff options
author | Marco d'Itri <md@linux.it> | 2018-09-11 01:21:52 +0200 |
---|---|---|
committer | Marco d'Itri <md@linux.it> | 2018-09-20 00:18:06 +0200 |
commit | 3197cb7db4d5ce13f1d011cfa6f9e42164d9b091 (patch) | |
tree | 409ffa5024733de65627223a31ea50366c2c8e40 | |
parent | 61f4e5d64c9ad64ff6b70bb2bf0afb3165bb9c51 (diff) | |
download | whois-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.h | 1 | ||||
-rw-r--r-- | mkpasswd.c | 13 |
2 files changed, 11 insertions, 3 deletions
@@ -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? */ @@ -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) { |