New os.c-cygwin (and some minor WishList change I forgot to commit).
[exim.git] / src / src / auths / get_data.c
CommitLineData
d7d7b7b9 1/* $Cambridge: exim/src/src/auths/get_data.c,v 1.3 2006/02/07 11:19:01 ph10 Exp $ */
0756eb3c
PH
2
3/*************************************************
4* Exim - an Internet mail transport agent *
5*************************************************/
6
d7d7b7b9 7/* Copyright (c) University of Cambridge 1995 - 2006 */
0756eb3c
PH
8/* See the file NOTICE for conditions of use and distribution. */
9
10#include "../exim.h"
11
12
13/*************************************************
14* Issue a challenge and get a response *
15*************************************************/
16
17/* This function is used by authentication drivers to output a challenge
18to the SMTP client and read the response line.
19
20Arguments:
21 aptr set to point to the response (which is in big_buffer)
22 challenge the challenge text (unencoded, may be binary)
23 challen the length of the challenge text
24
25Returns: OK on success
26 BAD64 if response too large for buffer
27 CANCELLED if response is "*"
28*/
29
30int
31auth_get_data(uschar **aptr, uschar *challenge, int challen)
32{
33int c;
34int p = 0;
35smtp_printf("334 %s\r\n", auth_b64encode(challenge, challen));
36while ((c = receive_getc()) != '\n' && c != EOF)
37 {
38 if (p >= big_buffer_size - 1) return BAD64;
39 big_buffer[p++] = c;
40 }
41if (p > 0 && big_buffer[p-1] == '\r') p--;
42big_buffer[p] = 0;
43if (Ustrcmp(big_buffer, "*") == 0) return CANCELLED;
44*aptr = big_buffer;
45return OK;
46}
47
48/* End of get_data.c */