- strip implied proto and superfluous "www." domain part.
[oweals/busybox.git] / loginutils / cryptpw.c
index 68f5e8074a014ee27ee1ebb4c404050e72d509c1..db5d95920a94ccbc6b309cb1278fc3bfff153890 100644 (file)
@@ -7,22 +7,52 @@
 
 #include "libbb.h"
 
+#define TESTING 0
+
+/*
+set TESTING to 1 and pipe some file through this script
+if you played with bbox's crypt implementation.
+
+while read line; do
+       n=`./busybox cryptpw -a des -- "$line"`
+       o=`./busybox_org cryptpw -a des -- "$line"`
+       test "$n" != "$o" && {
+               echo n="$n"
+               echo o="$o"
+               exit
+       }
+       n=`./busybox cryptpw -- "$line"`
+       o=`./busybox_org cryptpw -- "$line"`
+       test "$n" != "$o" && {
+               echo n="$n"
+               echo o="$o"
+               exit
+       }
+done
+ */
+
 int cryptpw_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-int cryptpw_main(int argc ATTRIBUTE_UNUSED, char **argv)
+int cryptpw_main(int argc UNUSED_PARAM, char **argv)
 {
        char salt[sizeof("$N$XXXXXXXX")];
+       char *opt_a;
 
-       if (!getopt32(argv, "a:", NULL) || argv[optind - 1][0] != 'd') {
-               strcpy(salt, "$1$");
-               /* Too ugly, and needs even more magic to handle endianness: */
-               //((uint32_t*)&salt)[0] = '$' + '1'*0x100 + '$'*0x10000;
-               /* Hope one day gcc will do it itself (inlining strcpy) */
+       if (!getopt32(argv, "a:", &opt_a) || opt_a[0] != 'd') {
+               salt[0] = '$';
+               salt[1] = '1';
+               salt[2] = '$';
                crypt_make_salt(salt + 3, 4, 0); /* md5 */
+#if TESTING
+               strcpy(salt + 3, "ajg./bcf");
+#endif
        } else {
                crypt_make_salt(salt, 1, 0);     /* des */
+#if TESTING
+               strcpy(salt, "a.");
+#endif
        }
 
-       puts(pw_encrypt(argv[optind] ? argv[optind] : xmalloc_fgetline(stdin), salt));
+       puts(pw_encrypt(argv[optind] ? argv[optind] : xmalloc_fgetline(stdin), salt, 1));
 
        return 0;
 }