Mercurial > dovecot > original-hg > dovecot-1.2
comparison src/auth/mech-skey.c @ 5598:971050640e3b HEAD
All password schemes can now be encoded with base64 or hex. The encoding is
".b64", ".base64" or ".hex" suffix in the scheme, eg. {plain.b64}.
Password scheme verification function can now be set to NULL, in which case
the verification is done by generating a new crypted password from given
plaintext password and comparing it.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 13 May 2007 15:17:09 +0300 |
parents | f8dc0bdb06a7 |
children | 84eea1977632 |
comparison
equal
deleted
inserted
replaced
5597:e9c43a73180c | 5598:971050640e3b |
---|---|
15 #include "otp.h" | 15 #include "otp.h" |
16 #include "otp-skey-common.h" | 16 #include "otp-skey-common.h" |
17 | 17 |
18 static void | 18 static void |
19 skey_send_challenge(struct auth_request *auth_request, | 19 skey_send_challenge(struct auth_request *auth_request, |
20 const char *credentials) | 20 const unsigned char *credentials, size_t size) |
21 { | 21 { |
22 struct otp_auth_request *request = | 22 struct otp_auth_request *request = |
23 (struct otp_auth_request *)auth_request; | 23 (struct otp_auth_request *)auth_request; |
24 const char *answer; | 24 const char *answer; |
25 | 25 |
26 if (otp_parse_dbentry(credentials, &request->state) != 0) { | 26 if (otp_parse_dbentry(t_strndup(credentials, size), |
27 &request->state) != 0) { | |
27 auth_request_log_error(&request->auth_request, "skey", | 28 auth_request_log_error(&request->auth_request, "skey", |
28 "invalid OTP data in passdb"); | 29 "invalid OTP data in passdb"); |
29 auth_request_fail(auth_request); | 30 auth_request_fail(auth_request); |
30 return; | 31 return; |
31 } | 32 } |
60 answer, strlen(answer)); | 61 answer, strlen(answer)); |
61 } | 62 } |
62 | 63 |
63 static void | 64 static void |
64 otp_credentials_callback(enum passdb_result result, | 65 otp_credentials_callback(enum passdb_result result, |
65 const char *credentials, | 66 const unsigned char *credentials, size_t size, |
66 struct auth_request *auth_request) | 67 struct auth_request *auth_request) |
67 { | 68 { |
68 switch (result) { | 69 switch (result) { |
69 case PASSDB_RESULT_OK: | 70 case PASSDB_RESULT_OK: |
70 skey_send_challenge(auth_request, credentials); | 71 skey_send_challenge(auth_request, credentials, size); |
71 break; | 72 break; |
72 case PASSDB_RESULT_INTERNAL_FAILURE: | 73 case PASSDB_RESULT_INTERNAL_FAILURE: |
73 auth_request_internal_failure(auth_request); | 74 auth_request_internal_failure(auth_request); |
74 break; | 75 break; |
75 default: | 76 default: |
78 } | 79 } |
79 } | 80 } |
80 | 81 |
81 static void | 82 static void |
82 skey_credentials_callback(enum passdb_result result, | 83 skey_credentials_callback(enum passdb_result result, |
83 const char *credentials, | 84 const unsigned char *credentials, size_t size, |
84 struct auth_request *auth_request) | 85 struct auth_request *auth_request) |
85 { | 86 { |
86 switch (result) { | 87 switch (result) { |
87 case PASSDB_RESULT_OK: | 88 case PASSDB_RESULT_OK: |
88 skey_send_challenge(auth_request, credentials); | 89 skey_send_challenge(auth_request, credentials, size); |
89 break; | 90 break; |
90 case PASSDB_RESULT_INTERNAL_FAILURE: | 91 case PASSDB_RESULT_INTERNAL_FAILURE: |
91 auth_request_internal_failure(auth_request); | 92 auth_request_internal_failure(auth_request); |
92 break; | 93 break; |
93 default: | 94 default: |