diff --git a/contrib/libexec/encrypt/encrypt.c b/contrib/libexec/encrypt/encrypt.c index e525fd27..f0d2b9e5 100644 --- a/contrib/libexec/encrypt/encrypt.c +++ b/contrib/libexec/encrypt/encrypt.c @@ -52,23 +52,24 @@ static struct hashing_method ids[] = { }; static void to64(char *, long int, int); +static void check_passwd(const char *, const char *); static void print_passwd(const char *); int main(int argc, char *argv[]) { char *line; + char *hash=""; size_t linesz; ssize_t linelen; if (argc > 2) { - fprintf(stderr, "usage: encrypt \n"); + fprintf(stderr, "usage: encrypt []\n: exactly as received from a previous encrypt invocation\n"); return (1); } if (argc == 2) { - print_passwd(argv[1]); - return (0); + hash=argv[1]; } line = NULL; @@ -76,13 +77,20 @@ main(int argc, char *argv[]) while ((linelen = getline(&line, &linesz, stdin)) != -1) { if (line[linelen - 1] == '\n') line[linelen - 1] = '\0'; - print_passwd(line); + check_passwd(line,hash); } free(line); return (0); } + +void check_passwd(const char *string, const char *salt) +{ + if (!salt || !*salt) {print_passwd(string); return;} + printf("%s\n", crypt(string, salt)); +} + void print_passwd(const char *string) {