svn commit: samba r12496 - in trunk/examples/auth/crackcheck: .

idra at samba.org idra at samba.org
Mon Dec 26 17:23:26 GMT 2005


Author: idra
Date: 2005-12-26 17:23:25 +0000 (Mon, 26 Dec 2005)
New Revision: 12496

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=12496

Log:

sync with 3.0


Modified:
   trunk/examples/auth/crackcheck/crackcheck.c


Changeset:
Modified: trunk/examples/auth/crackcheck/crackcheck.c
===================================================================
--- trunk/examples/auth/crackcheck/crackcheck.c	2005-12-26 17:22:46 UTC (rev 12495)
+++ trunk/examples/auth/crackcheck/crackcheck.c	2005-12-26 17:23:25 UTC (rev 12496)
@@ -19,20 +19,81 @@
 	exit(-1);
 }
 
+int complexity(char* passwd)
+{
+	/* TG 26.10.2005
+	 * check password for complexity like MS Windows NT 
+	 */
+
+	int c_upper = 0;
+	int c_lower = 0;
+	int c_digit = 0;
+	int c_punct = 0;
+	int c_tot = 0;
+	int i, len;
+
+	if (!passwd) goto fail;
+	len = strlen(passwd);
+
+	for (i = 0; i < len; i++) {
+
+		if (c_tot >= 3) break;
+
+		if (isupper(passwd[i])) {
+			if (!c_upper) {
+				c_upper = 1;
+				c_tot += 1;
+			}
+			continue;
+		}
+		if (islower(passwd[i])) {
+			if (!c_lower) {
+				c_lower = 1;
+				c_tot += 1;
+			}
+			continue;
+		}
+		if (isdigit(passwd[i])) {
+			if (!c_digit) {
+				c_digit = 1;
+				c_tot += 1;
+			}
+			continue;
+		}
+		if (ispunct(passwd[i])) {
+			if (!c_punct) {
+				c_punct = 1;
+				c_tot += 1;
+			}
+			continue;
+		}
+	}
+
+	if ((c_tot) < 3) goto fail;
+	return 0;
+
+fail:
+	fprintf(stderr, "ERR Complexity check failed\n\n");
+	return -4;
+}
+
 int main(int argc, char **argv) {
 	extern char *optarg;
-	int c;
+	int c, ret, complex_check = 0;
 
 	char f[256];
 	char *dictionary = NULL;
 	char *password;
 	char *reply;
 
-	while ( (c = getopt(argc, argv, "d:")) != EOF){
+	while ( (c = getopt(argc, argv, "d:c")) != EOF){
 		switch(c) {
 		case 'd':
 			dictionary = strdup(optarg);
 			break;
+		case 'c':
+			complex_check = 1;
+			break;
 		default:
 			usage(argv[0]);
 		}
@@ -43,6 +104,7 @@
 		usage(argv[0]);
 	} 
 
+	fflush(stdin);
 	password = fgets(f, sizeof(f), stdin);
 
 	if (password == NULL) {
@@ -50,6 +112,13 @@
 		exit(-2);
 	}
 
+	if (complex_check) {
+		ret = complexity(password);
+		if (ret) {
+			exit(ret);
+		}
+	}
+
 	reply = FascistCheck(password, dictionary);
 	if (reply != NULL) {
 		fprintf(stderr, "ERR - %s\n\n", reply);



More information about the samba-cvs mailing list