cryptpw: forgot svn add... how typical of me :(

This commit is contained in:
Denis Vlasenko 2007-05-08 23:23:35 +00:00
parent a04561f5f7
commit a035e9f1a9
3 changed files with 87 additions and 5 deletions

View File

@ -21,7 +21,6 @@ lib-y += copyfd.o
lib-y += crc32.o
lib-y += create_icmp6_socket.o
lib-y += create_icmp_socket.o
lib-y += crypt_make_salt.o
lib-y += default_error_retval.o
lib-y += device_open.o
lib-y += dump.o
@ -103,10 +102,8 @@ lib-y += xreadlink.o
lib-$(CONFIG_FEATURE_MOUNT_LOOP) += loop.o
lib-$(CONFIG_LOSETUP) += loop.o
lib-$(CONFIG_FEATURE_MTAB_SUPPORT) += mtab.o
lib-$(CONFIG_PASSWD) += pw_encrypt.o
lib-$(CONFIG_PASSWD) += crypt_make_salt.o
lib-$(CONFIG_CRYPTPW) += pw_encrypt.o
lib-$(CONFIG_CRYPTPW) += crypt_make_salt.o
lib-$(CONFIG_PASSWD) += pw_encrypt.o crypt_make_salt.o
lib-$(CONFIG_CRYPTPW) += pw_encrypt.o crypt_make_salt.o
lib-$(CONFIG_SULOGIN) += pw_encrypt.o
lib-$(CONFIG_FEATURE_HTTPD_AUTH_MD5) += pw_encrypt.o
lib-$(CONFIG_VLOCK) += correct_password.o

48
libbb/crypt_make_salt.c Normal file
View File

@ -0,0 +1,48 @@
/* vi: set sw=4 ts=4: */
/*
* crypt_make_salt
*
* i64c was also put here, this is the only function that uses it.
*
* Lifted from loginutils/passwd.c by Thomas Lundquist <thomasez@zelow.no>
*
*/
#include "libbb.h"
static int i64c(int i)
{
i &= 0x3f;
if (i == 0)
return '.';
if (i == 1)
return '/';
if (i < 12)
return ('0' - 2 + i);
if (i < 38)
return ('A' - 12 + i);
return ('a' - 38 + i);
}
void crypt_make_salt(char *p, int cnt)
{
unsigned x = x; /* it's pointless to initialize it anyway :) */
x += getpid() + time(NULL) + clock();
do {
/* x = (x*1664525 + 1013904223) % 2^32 generator is lame
* (low-order bit is not "random", etc...),
* but for our purposes it is good enough */
x = x*1664525 + 1013904223;
/* BTW, Park and Miller's "minimal standard generator" is
* x = x*16807 % ((2^31)-1)
* It has no problem with visibly alternating lowest bit
* but is also weak in cryptographic sense + needs div,
* which needs more code (and slower) on many CPUs */
*p++ = i64c(x >> 16);
*p++ = i64c(x >> 22);
} while (--cnt);
*p = '\0';
}

37
loginutils/cryptpw.c Normal file
View File

@ -0,0 +1,37 @@
/* vi: set sw=4 ts=4: */
/*
* cryptpw.c
*
* Cooked from passwd.c by Thomas Lundquist <thomasez@zelow.no>
*
*/
#include "busybox.h"
int cryptpw_main(int argc, char **argv);
int cryptpw_main(int argc, char **argv)
{
char *clear;
char salt[sizeof("$N$XXXXXXXX")]; /* "$N$XXXXXXXX" or "XX" */
const char *opt_a = "md5";
getopt32(argc, argv, "a:", &opt_a);
/* move past the commandline options */
/*argc -= optind; - unused */
argv += optind;
crypt_make_salt(salt, 1); /* des */
if (strcasecmp(opt_a, "md5") == 0) {
strcpy(salt, "$1$");
crypt_make_salt(salt + 3, 4);
} else if (strcasecmp(opt_a, "des") != 0) {
bb_show_usage();
}
clear = argv[0];
if (!clear)
clear = xmalloc_getline(stdin);
puts(pw_encrypt(clear, salt));
return 0;
}