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: