? aclocal.m4
? autom4te.cache
? ircdcron/ircd.cron
Index: src/ircd.c
===================================================================
RCS file: /cvs/unreal/src/ircd.c,v
retrieving revision 1.1.1.1.6.1.2.190.2.54
diff -u -B -r1.1.1.1.6.1.2.190.2.54 ircd.c
--- src/ircd.c	8 Sep 2010 11:07:22 -0000	1.1.1.1.6.1.2.190.2.54
+++ src/ircd.c	3 Apr 2011 04:44:21 -0000
@@ -1003,18 +1003,26 @@
 static void generate_cloakkeys()
 {
 	/* Generate 3 cloak keys */
-#define GENERATE_CLOAKKEY_MINLEN 10
-#define GENERATE_CLOAKKEY_MAXLEN 20 /* Length of cloak keys to generate. */
+#define GENERATE_CLOAKKEY_MINLEN 16
+#define GENERATE_CLOAKKEY_MAXLEN 32 /* Length of cloak keys to generate. */
 	char keyBuf[GENERATE_CLOAKKEY_MAXLEN + 1];
 	int keyNum;
 	int keyLen;
 	int charIndex;
 	int value;
 
+	short has_upper;
+	short has_lower;
+	short has_num;
+
 	fprintf(stderr, "Here are 3 random cloak keys:\n");
 
 	for (keyNum = 0; keyNum < 3; ++keyNum)
 	{
+		has_upper = 0;
+		has_lower = 0;
+		has_num = 0;
+
 		keyLen = (getrandom8() % (GENERATE_CLOAKKEY_MAXLEN - GENERATE_CLOAKKEY_MINLEN + 1)) + GENERATE_CLOAKKEY_MINLEN;
 		for (charIndex = 0; charIndex < keyLen; ++charIndex)
 		{
@@ -1022,17 +1030,25 @@
 			{
 				case 0: /* Uppercase. */
 					keyBuf[charIndex] = (char)('A' + (getrandom8() % ('Z' - 'A')));
+					has_upper = 1;
 					break;
 				case 1: /* Lowercase. */
 					keyBuf[charIndex] = (char)('a' + (getrandom8() % ('z' - 'a')));
+					has_lower = 1;
 					break;
 				case 2: /* Digit. */
 					keyBuf[charIndex] = (char)('0' + (getrandom8() % ('9' - '0')));
+					has_num = 1;
 					break;
 			}
 		}
 		keyBuf[keyLen] = '\0';
-		(void)fprintf(stderr, "%s\n", keyBuf);
+
+		if (has_upper && has_lower && has_num)
+			(void)fprintf(stderr, "%s\n", keyBuf);
+		else
+			/* Try again. For this reason, keyNum must be signed. */
+			keyNum--;
 	}
 }
 #endif
