blob: db5d95920a94ccbc6b309cb1278fc3bfff153890 [file] [log] [blame]
Denis Vlasenkoa035e9f2007-05-08 23:23:35 +00001/* vi: set sw=4 ts=4: */
2/*
3 * cryptpw.c
Denis Vlasenko4b924f32007-05-30 00:29:55 +00004 *
Denis Vlasenkoa035e9f2007-05-08 23:23:35 +00005 * Cooked from passwd.c by Thomas Lundquist <thomasez@zelow.no>
Denis Vlasenkoa035e9f2007-05-08 23:23:35 +00006 */
7
Denis Vlasenkob6adbf12007-05-26 19:00:18 +00008#include "libbb.h"
Denis Vlasenkoa035e9f2007-05-08 23:23:35 +00009
Denis Vlasenko4ea83bf2008-06-12 16:55:59 +000010#define TESTING 0
11
12/*
13set TESTING to 1 and pipe some file through this script
14if you played with bbox's crypt implementation.
15
16while read line; do
17 n=`./busybox cryptpw -a des -- "$line"`
Denis Vlasenko04087c62008-06-15 08:12:00 +000018 o=`./busybox_org cryptpw -a des -- "$line"`
Denis Vlasenko4ea83bf2008-06-12 16:55:59 +000019 test "$n" != "$o" && {
20 echo n="$n"
21 echo o="$o"
22 exit
23 }
24 n=`./busybox cryptpw -- "$line"`
Denis Vlasenko04087c62008-06-15 08:12:00 +000025 o=`./busybox_org cryptpw -- "$line"`
Denis Vlasenko4ea83bf2008-06-12 16:55:59 +000026 test "$n" != "$o" && {
27 echo n="$n"
28 echo o="$o"
29 exit
30 }
31done
32 */
33
Denis Vlasenko9b49a5e2007-10-11 10:05:36 +000034int cryptpw_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
Denis Vlasenkoa60f84e2008-07-05 09:18:54 +000035int cryptpw_main(int argc UNUSED_PARAM, char **argv)
Denis Vlasenkoa035e9f2007-05-08 23:23:35 +000036{
Denis Vlasenko57bf6682007-05-09 21:27:15 +000037 char salt[sizeof("$N$XXXXXXXX")];
Denis Vlasenko04087c62008-06-15 08:12:00 +000038 char *opt_a;
Denis Vlasenkoa035e9f2007-05-08 23:23:35 +000039
Denis Vlasenko04087c62008-06-15 08:12:00 +000040 if (!getopt32(argv, "a:", &opt_a) || opt_a[0] != 'd') {
41 salt[0] = '$';
42 salt[1] = '1';
43 salt[2] = '$';
Denis Vlasenko21d10142007-07-20 21:28:41 +000044 crypt_make_salt(salt + 3, 4, 0); /* md5 */
Denis Vlasenko4ea83bf2008-06-12 16:55:59 +000045#if TESTING
46 strcpy(salt + 3, "ajg./bcf");
47#endif
Denis Vlasenko57bf6682007-05-09 21:27:15 +000048 } else {
Denis Vlasenko21d10142007-07-20 21:28:41 +000049 crypt_make_salt(salt, 1, 0); /* des */
Denis Vlasenko4ea83bf2008-06-12 16:55:59 +000050#if TESTING
51 strcpy(salt, "a.");
52#endif
Denis Vlasenkoa035e9f2007-05-08 23:23:35 +000053 }
54
Denis Vlasenko4ea83bf2008-06-12 16:55:59 +000055 puts(pw_encrypt(argv[optind] ? argv[optind] : xmalloc_fgetline(stdin), salt, 1));
Denis Vlasenkoa035e9f2007-05-08 23:23:35 +000056
Denis Vlasenkoa035e9f2007-05-08 23:23:35 +000057 return 0;
58}