svn commit: trunk/busybox: libbb loginutils
vda at busybox.net
vda at busybox.net
Thu Nov 30 20:41:28 UTC 2006
Author: vda
Date: 2006-11-30 12:41:28 -0800 (Thu, 30 Nov 2006)
New Revision: 16740
Log:
passwd: small size optimization. salt generation improved
(really generated different salts even if called back-to-back).
Modified:
trunk/busybox/Makefile.custom
trunk/busybox/libbb/pw_encrypt.c
trunk/busybox/loginutils/passwd.c
Changeset:
Modified: trunk/busybox/Makefile.custom
===================================================================
--- trunk/busybox/Makefile.custom 2006-11-30 16:41:15 UTC (rev 16739)
+++ trunk/busybox/Makefile.custom 2006-11-30 20:41:28 UTC (rev 16740)
@@ -63,6 +63,10 @@
objsizes: busybox_unstripped
$(srctree)/scripts/objsizes
+.PHONY: bigdata
+bigdata: busybox_unstripped
+ nm --size-sort busybox_unstripped | grep -vi ' [tr] ' | tail -20
+
# Documentation Targets
.PHONY: doc
doc: docs/busybox.pod docs/BusyBox.txt docs/BusyBox.1 docs/BusyBox.html
Modified: trunk/busybox/libbb/pw_encrypt.c
===================================================================
--- trunk/busybox/libbb/pw_encrypt.c 2006-11-30 16:41:15 UTC (rev 16739)
+++ trunk/busybox/libbb/pw_encrypt.c 2006-11-30 20:41:28 UTC (rev 16740)
@@ -8,7 +8,6 @@
*/
#include "libbb.h"
-#include <string.h>
#include <crypt.h>
char *pw_encrypt(const char *clear, const char *salt)
Modified: trunk/busybox/loginutils/passwd.c
===================================================================
--- trunk/busybox/loginutils/passwd.c 2006-11-30 16:41:15 UTC (rev 16739)
+++ trunk/busybox/loginutils/passwd.c 2006-11-30 20:41:28 UTC (rev 16740)
@@ -5,6 +5,7 @@
#include "busybox.h"
#include <syslog.h>
+#include <sys/times.h> /* times() */
static void nuke_str(char *str)
@@ -19,28 +20,35 @@
return '.';
if (i == 1)
return '/';
- if (i >= 2 && i < 12)
+ if (i < 12)
return ('0' - 2 + i);
- if (i >= 12 && i < 38)
+ if (i < 38)
return ('A' - 12 + i);
- if (i >= 38 && i < 63)
- return ('a' - 38 + i);
- return 'z';
+ return ('a' - 38 + i);
}
-static char *crypt_make_salt(void)
+static void crypt_make_salt(char *p, int cnt)
{
- time_t now;
- static unsigned long x;
- static char result[3];
+#if !defined(__GLIBC__)
+ struct tms t;
+#define TIMES times(&t)
+#else
+/* glibc allows for times(NULL) a-la time() */
+#define TIMES times(NULL)
+#endif
+ unsigned long x = x; /* it's pointless to initialize it anyway :) */
- time(&now);
- x += now + getpid() + clock();
- result[0] = i64c(((x >> 18) ^ (x >> 6)) & 077);
- result[1] = i64c(((x >> 12) ^ x) & 077);
- result[2] = '\0';
- return result;
+ x += getpid();
+ do {
+ /* clock() and times() variability is different between systems */
+ /* hopefully at least one is good enough */
+ x += time(NULL) + clock() + TIMES;
+ *p++ = i64c(((x >> 18) ^ (x >> 6)) & 0x3f);
+ *p++ = i64c(((x >> 12) ^ x) & 0x3f);
+ usleep(100); /* or else time() etc won't change */
+ } while (--cnt);
+ *p = '\0';
}
@@ -88,14 +96,12 @@
goto err_ret;
}
- memset(salt, 0, sizeof(salt));
- if (algo == 1) { /* MD5 */
+ /*memset(salt, 0, sizeof(salt)); - why?*/
+ crypt_make_salt(salt, 1); /* des */
+ if (algo) { /* MD5 */
strcpy(salt, "$1$");
- strcat(salt, crypt_make_salt());
- strcat(salt, crypt_make_salt());
- strcat(salt, crypt_make_salt());
+ crypt_make_salt(salt + 3, 4);
}
- strcat(salt, crypt_make_salt());
ret = xstrdup(pw_encrypt(newp, salt)); /* returns ptr to static */
/* whee, success! */
More information about the busybox-cvs
mailing list