]> jfr.im git - solanum.git/blobdiff - tools/mkpasswd.c
WHOIS: Make hide_opers_in_whois not affect opers doing whois.
[solanum.git] / tools / mkpasswd.c
index 2ca2312c0cd7c232b012da1ba01b77dc34c14aba..4f80b970a4fd24e3db4879ac94709e3748844d46 100644 (file)
@@ -55,9 +55,6 @@ static void brief_usage(void);
 static char saltChars[] = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
        /* 0 .. 63, ascii - 64 */
 
-extern char *optarg;
-
-
 #ifdef __MINGW32__
 #include <conio.h>
 #ifdef PASS_MAX
@@ -72,7 +69,7 @@ getpass(const char *prompt)
        int c;
        int i = 0;
 
-       memset(getpassbuf, sizeof(getpassbuf), 0);
+       memset(getpassbuf, 0, sizeof(getpassbuf));
        fputs(prompt, stderr);
        for(;;)
        {
@@ -101,6 +98,7 @@ main(int argc, char *argv[])
        int c;
        char *saltpara = NULL;
        char *salt;
+       char *hashed;
        int flag = 0;
        int length = 0;         /* Not Set */
        int rounds = 0;         /* Not set, since extended DES needs 25 and blowfish needs
@@ -242,14 +240,26 @@ main(int argc, char *argv[])
        if(flag & FLAG_PASS)
        {
                if(!plaintext)
-                       printf("Please enter a valid password\n");
+               {
+                       fprintf(stderr, "Please enter a valid password\n");
+                       return 1;
+               }
+
+               hashed = rb_crypt(plaintext, salt);
        }
        else
        {
-               plaintext = getpass("plaintext: ");
+               hashed = strdup(rb_crypt(getpass("plaintext: "), salt));
+               plaintext = getpass("again: ");
+
+               if (strcmp(rb_crypt(plaintext, salt), hashed) != 0)
+               {
+                       fprintf(stderr, "Passwords do not match\n");
+                       return 1;
+               }
        }
 
-       printf("%s\n", rb_crypt(plaintext, salt));
+       printf("%s\n", hashed);
        return 0;
 }