]> 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 9d841d149ac75ef6281a46520bc1f21e727d2bf6..4f80b970a4fd24e3db4879ac94709e3748844d46 100644 (file)
@@ -5,8 +5,8 @@
 ** md5 patch by W. Campbell <wcampbel@botbay.net>
 ** Modernization, getopt, etc for the Hybrid IRCD team
 ** by W. Campbell
-** 
-** /dev/random for salt generation added by 
+**
+** /dev/random for salt generation added by
 ** Aaron Sethman <androsyn@ratbox.org>
 **
 ** $Id: mkpasswd.c 26439 2009-02-01 15:27:24Z jilles $
@@ -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
@@ -163,7 +161,16 @@ main(int argc, char *argv[])
                }
        }
 
-       if(flag & FLAG_BLOWFISH)
+       if(flag & FLAG_MD5)
+       {
+               if(length == 0)
+                       length = 8;
+               if(flag & FLAG_SALT)
+                       salt = make_md5_salt_para(saltpara);
+               else
+                       salt = make_md5_salt(length);
+       }
+       else if(flag & FLAG_BLOWFISH)
        {
                if(length == 0)
                        length = 22;
@@ -181,15 +188,6 @@ main(int argc, char *argv[])
                else
                        salt = make_sha256_salt(length);
        }
-       else if(flag & FLAG_SHA512)
-       {
-               if(length == 0)
-                       length = 16;
-               if(flag & FLAG_SALT)
-                       salt = make_sha512_salt_para(saltpara);
-               else
-                       salt = make_sha512_salt(length);
-       }
        else if(flag & FLAG_EXT)
        {
                /* XXX - rounds needs to be done */
@@ -232,24 +230,36 @@ main(int argc, char *argv[])
        else
        {
                if(length == 0)
-                       length = 8;
+                       length = 16;
                if(flag & FLAG_SALT)
-                       salt = make_md5_salt_para(saltpara);
+                       salt = make_sha512_salt_para(saltpara);
                else
-                       salt = make_md5_salt(length);
+                       salt = make_sha512_salt(length);
        }
 
        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;
 }