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