Denis Vlasenko | a035e9f | 2007-05-08 23:23:35 +0000 | [diff] [blame] | 1 | /* vi: set sw=4 ts=4: */ |
| 2 | /* |
| 3 | * cryptpw.c |
Denis Vlasenko | 4b924f3 | 2007-05-30 00:29:55 +0000 | [diff] [blame] | 4 | * |
Denis Vlasenko | a035e9f | 2007-05-08 23:23:35 +0000 | [diff] [blame] | 5 | * Cooked from passwd.c by Thomas Lundquist <thomasez@zelow.no> |
Denis Vlasenko | a035e9f | 2007-05-08 23:23:35 +0000 | [diff] [blame] | 6 | */ |
| 7 | |
Denis Vlasenko | b6adbf1 | 2007-05-26 19:00:18 +0000 | [diff] [blame] | 8 | #include "libbb.h" |
Denis Vlasenko | a035e9f | 2007-05-08 23:23:35 +0000 | [diff] [blame] | 9 | |
Denis Vlasenko | 4ea83bf | 2008-06-12 16:55:59 +0000 | [diff] [blame] | 10 | #define TESTING 0 |
| 11 | |
| 12 | /* |
| 13 | set TESTING to 1 and pipe some file through this script |
| 14 | if you played with bbox's crypt implementation. |
| 15 | |
| 16 | while read line; do |
| 17 | n=`./busybox cryptpw -a des -- "$line"` |
Denis Vlasenko | 04087c6 | 2008-06-15 08:12:00 +0000 | [diff] [blame] | 18 | o=`./busybox_org cryptpw -a des -- "$line"` |
Denis Vlasenko | 4ea83bf | 2008-06-12 16:55:59 +0000 | [diff] [blame] | 19 | test "$n" != "$o" && { |
| 20 | echo n="$n" |
| 21 | echo o="$o" |
| 22 | exit |
| 23 | } |
| 24 | n=`./busybox cryptpw -- "$line"` |
Denis Vlasenko | 04087c6 | 2008-06-15 08:12:00 +0000 | [diff] [blame] | 25 | o=`./busybox_org cryptpw -- "$line"` |
Denis Vlasenko | 4ea83bf | 2008-06-12 16:55:59 +0000 | [diff] [blame] | 26 | test "$n" != "$o" && { |
| 27 | echo n="$n" |
| 28 | echo o="$o" |
| 29 | exit |
| 30 | } |
| 31 | done |
| 32 | */ |
| 33 | |
Denis Vlasenko | 9b49a5e | 2007-10-11 10:05:36 +0000 | [diff] [blame] | 34 | int cryptpw_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; |
Denis Vlasenko | a60f84e | 2008-07-05 09:18:54 +0000 | [diff] [blame^] | 35 | int cryptpw_main(int argc UNUSED_PARAM, char **argv) |
Denis Vlasenko | a035e9f | 2007-05-08 23:23:35 +0000 | [diff] [blame] | 36 | { |
Denis Vlasenko | 57bf668 | 2007-05-09 21:27:15 +0000 | [diff] [blame] | 37 | char salt[sizeof("$N$XXXXXXXX")]; |
Denis Vlasenko | 04087c6 | 2008-06-15 08:12:00 +0000 | [diff] [blame] | 38 | char *opt_a; |
Denis Vlasenko | a035e9f | 2007-05-08 23:23:35 +0000 | [diff] [blame] | 39 | |
Denis Vlasenko | 04087c6 | 2008-06-15 08:12:00 +0000 | [diff] [blame] | 40 | if (!getopt32(argv, "a:", &opt_a) || opt_a[0] != 'd') { |
| 41 | salt[0] = '$'; |
| 42 | salt[1] = '1'; |
| 43 | salt[2] = '$'; |
Denis Vlasenko | 21d1014 | 2007-07-20 21:28:41 +0000 | [diff] [blame] | 44 | crypt_make_salt(salt + 3, 4, 0); /* md5 */ |
Denis Vlasenko | 4ea83bf | 2008-06-12 16:55:59 +0000 | [diff] [blame] | 45 | #if TESTING |
| 46 | strcpy(salt + 3, "ajg./bcf"); |
| 47 | #endif |
Denis Vlasenko | 57bf668 | 2007-05-09 21:27:15 +0000 | [diff] [blame] | 48 | } else { |
Denis Vlasenko | 21d1014 | 2007-07-20 21:28:41 +0000 | [diff] [blame] | 49 | crypt_make_salt(salt, 1, 0); /* des */ |
Denis Vlasenko | 4ea83bf | 2008-06-12 16:55:59 +0000 | [diff] [blame] | 50 | #if TESTING |
| 51 | strcpy(salt, "a."); |
| 52 | #endif |
Denis Vlasenko | a035e9f | 2007-05-08 23:23:35 +0000 | [diff] [blame] | 53 | } |
| 54 | |
Denis Vlasenko | 4ea83bf | 2008-06-12 16:55:59 +0000 | [diff] [blame] | 55 | puts(pw_encrypt(argv[optind] ? argv[optind] : xmalloc_fgetline(stdin), salt, 1)); |
Denis Vlasenko | a035e9f | 2007-05-08 23:23:35 +0000 | [diff] [blame] | 56 | |
Denis Vlasenko | a035e9f | 2007-05-08 23:23:35 +0000 | [diff] [blame] | 57 | return 0; |
| 58 | } |