summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco d'Itri <md@linux.it>2018-10-14 03:41:14 +0200
committerMarco d'Itri <md@linux.it>2018-10-14 03:41:14 +0200
commit4d24d493ff9e2e706a9d025b33956e8764a87c01 (patch)
tree83616d7b1773e4673ca46e7e024577f745da2def
parent80c36bb8e584758def534fc2520a40447007422d (diff)
downloadwhois-4d24d493ff9e2e706a9d025b33956e8764a87c01.tar.gz
mkpasswd: implement a generic way to provide the hash type
-rw-r--r--mkpasswd.14
-rw-r--r--mkpasswd.c11
2 files changed, 15 insertions, 0 deletions
diff --git a/mkpasswd.1 b/mkpasswd.1
index 86a949c..21555ad 100644
--- a/mkpasswd.1
+++ b/mkpasswd.1
@@ -25,6 +25,8 @@ The behavior is undefined if this option is used without \fI--method\fP.
.B -m, --method=TYPE
Compute the password using the \fITYPE\fP method.
If \fITYPE\fP is \fIhelp\fP then the available methods are printed.
+If \fITYPE\fP begins and end with \fI$\fP characters then the string
+is passed to \fIcrypt_gensalt(3)\fP as-is.
.TP
.B -5
Like \fI--method=md5\fP.
@@ -50,6 +52,8 @@ This programs suffers of a bad case of featuritis.
.IR passwd(1),
.IR passwd(5),
.IR crypt(3),
+.IR crypt(5),
+.IR crypt_gensalt(3),
.IR getpass(3)
.SH AUTHOR
.B mkpasswd
diff --git a/mkpasswd.c b/mkpasswd.c
index b2a4b95..00e839b 100644
--- a/mkpasswd.c
+++ b/mkpasswd.c
@@ -181,6 +181,17 @@ int main(int argc, char *argv[])
display_methods();
exit(0);
}
+#if defined HAVE_LINUX_CRYPT_GENSALT || defined HAVE_SOLARIS_CRYPT_GENSALT
+ if (optarg[0] == '$'
+ && strlen(optarg) > 2
+ && *(optarg + strlen(optarg) - 1) == '$') {
+ salt_prefix = NOFAIL(strdup(optarg));
+ salt_minlen = 0;
+ salt_maxlen = 0;
+ rounds_support = 0;
+ break;
+ }
+#endif
for (i = 0; methods[i].method != NULL; i++)
if (strcaseeq(methods[i].method, optarg)) {
salt_prefix = methods[i].prefix;