3d2ebfe61700783a196600cba8b4705435f4ee05
[users/heiko/exim.git] / src / src / auths / get_no64_data.c
1 /* $Cambridge: exim/src/src/auths/get_no64_data.c,v 1.5 2007/01/08 10:50:19 ph10 Exp $ */
2
3 /*************************************************
4 *     Exim - an Internet mail transport agent    *
5 *************************************************/
6
7 /* Copyright (c) University of Cambridge 1995 - 2007 */
8 /* See the file NOTICE for conditions of use and distribution. */
9
10 #include "../exim.h"
11
12
13 /*************************************************
14 *  Issue a non-b64 challenge and get a response  *
15 *************************************************/
16
17 /* This function is used by authentication drivers to output a challenge
18 to the SMTP client and read the response line. This version does not use base
19 64 encoding for the text on the 334 line. It is used by the SPA and dovecot
20 authenticators.
21
22 Arguments:
23    aptr       set to point to the response (which is in big_buffer)
24    challenge  the challenge text (unencoded)
25
26 Returns:      OK on success
27               BAD64 if response too large for buffer
28               CANCELLED if response is "*"
29 */
30
31 int
32 auth_get_no64_data(uschar **aptr, uschar *challenge)
33 {
34 int c;
35 int p = 0;
36 smtp_printf("334 %s\r\n", challenge);
37 while ((c = receive_getc()) != '\n' && c != EOF)
38   {
39   if (p >= big_buffer_size - 1) return BAD64;
40   big_buffer[p++] = c;
41   }
42 if (p > 0 && big_buffer[p-1] == '\r') p--;
43 big_buffer[p] = 0;
44 if (Ustrcmp(big_buffer, "*") == 0) return CANCELLED;
45 *aptr = big_buffer;
46 return OK;
47 }
48
49 /* End of get_no64_data.c */