summaryrefslogtreecommitdiff
path: root/examples/auth
diff options
context:
space:
mode:
authorSimo Sorce <idra@samba.org>2005-12-26 17:22:46 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 11:05:58 -0500
commitb7eec4e85693deedf14908cf909e39a2167558eb (patch)
treea0cf8a3e6afb62328a3d84d0ef7e62a36e306f7d /examples/auth
parentc4ccc8f37ec4247a3a27277df14311389040fc25 (diff)
downloadsamba-b7eec4e85693deedf14908cf909e39a2167558eb.tar.gz
samba-b7eec4e85693deedf14908cf909e39a2167558eb.tar.bz2
samba-b7eec4e85693deedf14908cf909e39a2167558eb.zip
r12495: Crackcheck utility enhancement based on patch sent by Tom Geissler
(This used to be commit aa34304f61bd10cb1f80b4c0c27dd3834dc47fa3)
Diffstat (limited to 'examples/auth')
-rw-r--r--examples/auth/crackcheck/crackcheck.c73
1 files changed, 71 insertions, 2 deletions
diff --git a/examples/auth/crackcheck/crackcheck.c b/examples/auth/crackcheck/crackcheck.c
index 338433779b..0636114a17 100644
--- a/examples/auth/crackcheck/crackcheck.c
+++ b/examples/auth/crackcheck/crackcheck.c
@@ -19,20 +19,81 @@ void usage(char *command) {
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 @@ int main(int argc, char **argv) {
usage(argv[0]);
}
+ fflush(stdin);
password = fgets(f, sizeof(f), stdin);
if (password == NULL) {
@@ -50,6 +112,13 @@ int main(int argc, char **argv) {
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);