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