diff options
Diffstat (limited to 'loginutils/cryptpw.c')
-rw-r--r-- | loginutils/cryptpw.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/loginutils/cryptpw.c b/loginutils/cryptpw.c new file mode 100644 index 0000000..db5d959 --- /dev/null +++ b/loginutils/cryptpw.c @@ -0,0 +1,58 @@ +/* vi: set sw=4 ts=4: */ +/* + * cryptpw.c + * + * Cooked from passwd.c by Thomas Lundquist <thomasez@zelow.no> + */ + +#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 UNUSED_PARAM, char **argv) +{ + char salt[sizeof("$N$XXXXXXXX")]; + char *opt_a; + + 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, 1)); + + return 0; +} |