1 #include <string.h>
2 #include "sasl.h"
3 #include "sasl_internal.h"
4
response1(struct sasl_state * ss,const str * response,str * challenge)5 static int response1(struct sasl_state* ss,
6 const str* response, str* challenge)
7 {
8 unsigned i;
9 unsigned j;
10 if (response->len == 0)
11 return SASL_RESP_BAD;
12 if ((i = str_findfirst(response, 0)) == (unsigned)-1)
13 return SASL_RESP_BAD;
14 ++i;
15 if ((j = str_findnext(response, 0, i)) == (unsigned)-1)
16 return SASL_RESP_BAD;
17 ++j;
18 return sasl_authenticate_plain(ss, response->s+i, response->s+j);
19 (void)challenge;
20 }
21
sasl_plain_start(struct sasl_state * ss,const str * response,str * challenge)22 int sasl_plain_start(struct sasl_state* ss,
23 const str* response, str* challenge)
24 {
25 if (response)
26 return response1(ss, response, challenge);
27 if (!str_truncate(challenge, 0))
28 return SASL_TEMP_FAIL;
29 ss->response = response1;
30 return SASL_CHALLENGE;
31 }
32