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;