diff options
-rw-r--r-- | source/auth/credentials/credentials.c | 21 | ||||
-rw-r--r-- | source/auth/credentials/credentials.h | 6 |
2 files changed, 26 insertions, 1 deletions
diff --git a/source/auth/credentials/credentials.c b/source/auth/credentials/credentials.c index ee90c8228ab..66b6c120cf3 100644 --- a/source/auth/credentials/credentials.c +++ b/source/auth/credentials/credentials.c @@ -639,3 +639,24 @@ BOOL cli_credentials_is_anonymous(struct cli_credentials *cred) return False; } + +/** + * Mark the current password for a credentials struct as wrong. This will + * cause the password to be prompted again (if a callback is set). + * + * This will decremebt the number of times the password can be tried. + * + * @retval whether the credentials struct is finished + */ +BOOL cli_credentials_wrong_password(struct cli_credentials *cred) +{ + if (cred->password_obtained != CRED_CALLBACK_RESULT) { + return False; + } + + cred->password_obtained = CRED_CALLBACK; + + cred->tries--; + + return (cred->tries > 0); +} diff --git a/source/auth/credentials/credentials.h b/source/auth/credentials/credentials.h index 2e9d77ccae5..c0fec45b6fd 100644 --- a/source/auth/credentials/credentials.h +++ b/source/auth/credentials/credentials.h @@ -3,7 +3,7 @@ Client credentials structure - Copyright (C) Jelmer Vernooij 2004-2005 + Copyright (C) Jelmer Vernooij 2004-2006 Copyright (C) Andrew Bartlett <abartlet@samba.org> 2005 This program is free software; you can redistribute it and/or modify @@ -33,6 +33,7 @@ enum credentials_obtained { CRED_GUESS_ENV, /* Current value should be used, which was guessed */ CRED_CALLBACK, /* Callback should be used to obtain value */ CRED_GUESS_FILE, /* A guess from a file (or file pointed at in env variable) */ + CRED_CALLBACK_RESULT, /* Value was obtained from a callback */ CRED_SPECIFIED /* Was explicitly specified on the command-line */ }; @@ -104,6 +105,9 @@ struct cli_credentials { /* Should we be trying to use kerberos? */ enum credentials_use_kerberos use_kerberos; + + /* Number of retries left before bailing out */ + int tries; }; #include "auth/credentials/credentials_proto.h" |