]> andersk Git - mod-vhost-ldap.git/blobdiff - dtpasswd.c
upstream? :-)
[mod-vhost-ldap.git] / dtpasswd.c
diff --git a/dtpasswd.c b/dtpasswd.c
new file mode 100644 (file)
index 0000000..fbdb6d5
--- /dev/null
@@ -0,0 +1,86 @@
+
+#include <stdio.h>
+#include <fcntl.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys/time.h>
+#include <time.h>
+#include <sys/types.h>
+
+#define _XOPEN_SOURCE
+#define MD5_CRYPT_ENAB yes
+#include <unistd.h>
+
+
+extern char *crypt (__const char *__key, __const char *__salt);
+
+char *crypt_make_salt (void)
+{
+        struct timeval tv;
+        static char result[40];
+
+        result[0] = '\0';
+        strcpy (result, "$1$"); /* magic for the new MD5 crypt() */
+
+        gettimeofday (&tv, (struct timezone *) 0);
+        strcat (result, l64a (tv.tv_usec));
+        strcat (result, l64a (tv.tv_sec + getpid () + clock ()));
+
+        if (strlen (result) > 3 + 8) result[11] = '\0';
+
+        return result;
+}
+
+char *pw_encrypt (const char *clear, const char *salt)
+{
+        static char cipher[128];
+        char *cp = crypt (clear, salt);
+        strcpy (cipher, cp);
+        return cipher;
+}
+
+
+int main ()
+{
+       /* for new password, we generate salt 
+        * for check we use encrypted password as salt
+        * char *crpasswd_or_newsalt = crypt_make_salt();
+       */
+
+       const char* msg = "Enter password:";
+
+       char *clear = NULL;
+       // clear = "enterclearpasswordhere";
+       // or simply get it
+       if ( !(clear = getpass(msg)) || strlen(clear) == 0 ) 
+       {
+       fprintf (stderr, ("You entered no password \n")); 
+       return 1;
+       }
+       else 
+       {
+               char *crpasswd_or_newsalt = "$1$RG.pRvZh$Q0WZ8clsqtMUBRLFckoQg1";
+               char *cipher = pw_encrypt (clear, crpasswd_or_newsalt);
+
+               if (strcmp (cipher, crpasswd_or_newsalt) != 0) 
+               {
+                       fprintf (stderr, (crpasswd_or_newsalt));
+                       fprintf (stderr, ("\n"));
+                       fprintf (stderr, ("Incorrect password. Result is:\n"));
+                       fprintf (stderr, (cipher));
+                       fprintf (stderr, ("\n"));
+                       return 1;
+               } 
+               else 
+               {
+               fprintf (stderr, ("\n"));
+               fprintf (stderr, (crpasswd_or_newsalt));
+               fprintf (stderr, ("\n"));
+               fprintf (stderr, ("Good password\n"));
+               fprintf (stderr, (cipher));
+               fprintf (stderr, ("\n"));
+               return 0;
+               }
+       }
+}
+
This page took 0.149536 seconds and 4 git commands to generate.